ふつうに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
こんな風に書くだけで良い