search
LoginSignup
53
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Ansibleのshellモジュールをchanged_whenと組み合わせて柔軟に

ふつうに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行つけるとよい

追記

上の例はAnsibleでaptモジュールを使うためにpython-aptを入れる必要があったため作成したタスクで, 単純にapt-getでなにか入れたいだけなら, shellでなくaptモジュールで

apt.yml
- name: install nginx
  sudo: yes
  apt: pkg=nginx update_cache=yes

こんな風に書くだけで良い

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
53
Help us understand the problem. What are the problem?