17
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

【ansible】強制的にchangedを発生させない方法

Ansibleのshell moduleを使用してコマンド結果のみをregisterに保存しておきたい時がある

自分の場合はログインShellがzshなのかbashなのかを調べたくてこんなタスクを書いた

main.yml
- name: check using shell register in file path
  shell: |
      if [ `echo $SHELL | grep -c "zsh"` -eq 1 ]; then
        echo ".zshrc"
      elif [ `echo $SHELL | grep -c "bash"` -eq 1 ]; then
        if [ `uname` = "Linux" ]; then
          echo "~/.bashrc"
        elif [ `uname` = "Darwin" ]; then
          echo "~/.bash_profile"
        fi
      fi
  register: shell_configure_file

上記タスクを実行した場合は必ず changed になってしまう。

TASK: [python/pyenv/install | check using shell register in file path] ********
changed: [127.0.0.1]

このchangedを常にokにしたい時に色々調べてしまったのでメモ

環境

  • Mac OSX Yosemite(10.10.5)
    • python 2.7.10
      • ansible 1.9.4

参考にしたサイト

ansible個人的メモ&Tips

常にokにする方法

changed_when: False をタスクに記載してしまえばよい

先ほどのtaskの場合だとこうなる

main.yml
- name: check using shell register in file path
  shell: |
      if [ `echo $SHELL | grep -c "zsh"` -eq 1 ]; then
        echo ".zshrc"
      elif [ `echo $SHELL | grep -c "bash"` -eq 1 ]; then
        if [ `uname` = "Linux" ]; then
          echo "~/.bashrc"
        elif [ `uname` = "Darwin" ]; then
          echo "~/.bash_profile"
        fi
      fi
  changed_when: False
  register: shell_configure_file

なぜchangedを許容してはいけないのか?

個人的な見解なのだが、自分が書いたplaybookであれば、これは気にしなくてよいchangedだ。などansibleの実行結果を見てすぐ判断できるだろうが、このplaybookを他人が実行した時に changed がでた場合に「おや、何か設定が何か変わったのか?」と思ってしまう。

changedは対象のOSの振る舞いが変わった時だけchangedになる方が望ましいと思う。

最後に

ansibleは簡単なんだけども色々回避方法があるから返ってtask作るときはムズイなー。。。
上記taskもshellゴリゴリ書いちゃってるから自分の中ではかなり負けた気分だし・・・・

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
17
Help us understand the problem. What are the problem?