ふつうにshell叩くと常に実行されてchanged=1
になり気持ち悪い. changedになる条件をchanged_when
で定義することが出来る.
tasks:
- name: install python-apt
shell: LC_ALL=en_EN.UTF-8 sudo apt-get install -y python-apt
register: result
changed_when: '"is already the newest version" not in result.stdout'
- debug: var=result
- ポイント
- commandではなくshell moduleを使う. commandだとchanged_when行で
error while evaluating conditional
とエラーが発生 - 日本語出力だとマッチさせにくいので
LC_ALL=en_EN.UTF-8
を付ける - shell実行結果を変数にregister.
register.stdout
,register.stderr
等が使える - 試す時はdebug行つけるとよい
- commandではなくshell moduleを使う. commandだとchanged_when行で
追記
上の例はAnsibleでaptモジュールを使うためにpython-apt
を入れる必要があったため作成したタスクで, 単純にapt-getでなにか入れたいだけなら, shellでなくaptモジュールで
apt.yml
- name: install nginx
sudo: yes
apt: pkg=nginx update_cache=yes
こんな風に書くだけで良い