😀
【ansible】強制的にchangedを発生させない方法
Ansibleのshell moduleを使用してコマンド結果のみをregisterに保存しておきたい時がある
自分の場合はログインShellがzshなのかbashなのかを調べたくてこんなタスクを書いた
- 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
- python 2.7.10
参考にしたサイト
常にokにする方法
changed_when: False
をタスクに記載してしまえばよい
先ほどのtaskの場合だとこうなる
- 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ゴリゴリ書いちゃってるから自分の中ではかなり負けた気分だし・・・・
Discussion