LoginSignup
15
17

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-11-20

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ゴリゴリ書いちゃってるから自分の中ではかなり負けた気分だし・・・・

15
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
17