ansibleここがわからないよ
目次
ansibleを使っていてこまったこと、わかりにくかったこと
個人的な備忘です。ansibleという決まったフレームワークにのることで、いろいろと自動でやってくれるのですが、その分何が自動で、何が自動じゃないのかわからないと混乱します。自分がハマったことをまとめておきたいと思います。
※ 随時更新
/group_varsにallファイルをおくと、すべてのグループを対象に変数を設定される
ここの変数どこで定義されているねん、っと思った。
なんでもかんでもdry-runすりゃよいってもんじゃない
なんでもかんでもdry-runすりゃいいってもんじゃない(モジュールによっては、dry-runのときに処理がskipされるからうごかないよ)。
例:プロンプトに出した値を、変数にぶっこんで処理する場合。これはdry-runで動かすと動かない。
yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
- hosts: all gather_facts: no become: no connection: local vars_files: - 'group_vars/secret_key' vars_prompt: - name: "instance_suffix_number" prompt: "Please suffix number. e.x( instance tag name: 192abc.com_nginxX or 192abc.com_nginxXX )" private: no default: "" tasks: - name: $HOME register command: echo $HOME register: home - name: debug debug: var=home - name: Set fact ansible ansible_python_interpreter set_fact: ansible_python_interpreter="{{ home.stdout }}/.pyenv/shims/python" |
結果
PLAY [all] *********************************************************************
TASK [$HOME register] **********************************************************
skipping: [localhost] => {“changed”: false, “msg”: “remote module (command) does not support check mode”, “skipped”: true}TASK [debug] *******************************************************************
ok: [localhost] => {
“home”: {
“changed”: false,
“msg”: “remote module (command) does not support check mode”,
“skipped”: true
}
}TASK [Set fact ansible ansible_python_interpreter] *****************************
fatal: [localhost]: FAILED! => {“failed”: true, “msg”: “the field ‘args’ has an invalid value, which appears to include a variable that is undefined. The error was: ‘dict object’ has no attribute ‘stdout’\n\nThe error appears to have been in ‘/Users/TomoakiTANAKA/Projects/eversense-develop/synced/ansible-eversense.co.jp/launch_ec2.yml’: line 25, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n # see http://dev.classmethod.jp/server-side/use-ansible-create-ec2-instance/\n – name: Set fact ansible ansible_python_interpreter\n ^ here\n”}
to retry, use: –limit @/Users/TomoakiTANAKA/Projects/eversense-develop/synced/ansible-eversense.co.jp/launch_ec2.retryPLAY RECAP *********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=1
まぁ、registerした値がこうならこけちゃいますね…。dry-run時にスキップされないようにしないとだめみたいです。
参考:http://blog.kenjiskywalker.org/blog/2015/01/08/ansible-check-mode/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
- hosts: all gather_facts: no become: no connection: local vars_files: - 'group_vars/secret_key' vars_prompt: - name: "instance_suffix_number" prompt: "Please suffix number. e.x( instance tag name: 192abc.com_nginxX or 192abc.com_nginxXX )" private: no default: "" tasks: - name: $HOME register command: echo $HOME register: home always_run : yes - name: debug debug: var=home - name: Set fact ansible ansible_python_interpreter set_fact: ansible_python_interpreter="{{ home.stdout }}/.pyenv/shims/python" |
limitする時の諸注意
–limitでhostを絞ることができますね。絞ると、自動的に(?)group_varsの変数ファイルも読み込まれている気がします。名前を変えたときに動かないといった問題を回避するために、注意しましょう。
※要調査ですが…
always_runが廃止されてcheck_modeになりました
https://docs.ansible.com/ansible/latest/user_guide/playbooks_checkmode.html#enabling-or-disabling-check-mode-for-tasks