2020年11月18日水曜日

Ansible で環境変数を使って特定の環境ごとにタスクを切り替える方法

概要

例えばデプロイするファイルを動的に切り替えたい場合に毎回 playbook を変更するのは面倒です
また group_vars などで変数で定義してもいいですがそれも毎回変更するのは面倒です
そんなときは環境変数で playbook を実行するたびに別の値を設定しそれを参照するようにできます

環境

  • macOS 10.15.7
  • ansible 2.9.10

サンプルコード

HOGE という環境変数を設定することを想定しています
copy のファイル名や when の条件にも使えます
環境変数の設定を必須にしたい場合は playbook の冒頭で変数のチェックをして空であれば fail にするような処理を入れたほうが良いかなと思います

---
- hosts: localhost
  gather_facts: no
  vars_files:
    - vault.yml
  tasks:
    - name: Check HOGE env
      fail: 
        msg: The HOGE variable is an empty or None.
      when: lookup('env', 'HOGE') == ""

    - name: Print HOGE env
      debug:
        msg: "HOGE = {{ lookup('env', 'HOGE') }}"

    - name: Put a file
      copy:
        src: files/test_{{ lookup('env', 'HOGE') }}.txt
        dest: ~/Downloads/test.txt
        owner: hawksnowlog
        group: staff
        mode: '0644'

実行する場合はコマンドの前に環境変数をセットしてから実行しましょう

  • HOGE=fuga ansible-playbook -i hosts site.yml

特定の値が環境変数に設定されているか確認する場合は

サンプルコードは空の場合にエラーにしました
特定の値が入っていない場合はエラーにしたい場合は when を以下のように変更しましょう

when: lookup('env', 'HOGE') not in ["hoge", "fuga", "foo"]

参考サイト

0 件のコメント:

コメントを投稿