こんにちは。サイオステクノロジーの塙です。
こちらでは、Ansibleの書き方・Tipsについて説明しています。Ansibleとはどういったものなのかについては前提知識としており、初心者の方には入門編などの記事を閲読してからをおすすめします。
Ansibleを扱う際に下記のように、どう実装していいか分からないときがあります。
- 実装方法がいくつかありどの方法で記載したら最適なのか
- パラメータを変更したいがyamlの記載方法が分からない
本記事では、そういった内容を実際のパターンと共に記載することで今後のAnsible Playbookの作成に活用いただければとそんな思いで記載をします。
Tips
新しい変数の登録
ansibleのplaybook内で変数を定義する際のset_fact moduleについて
■ 変数をループで使用する時
通常、set_factをloopで使用すると、set_factに格納される変数はloopの最後に処理された変数になる。
ただ、registerを使用すると、register変数にはループ中の各値を保存することが可能である。
# task
vars:
example_list:
["one", "two", "three"]
tasks:
- set_fact:
example: "{{ item }}"
register: result
loop: '{{ example_list }}'
- debug:
msg:
- "{{ example }}"
- "{{ result }}"
# 実行時
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": [
"three",
{
...(snip)...
"results": [
{
"ansible_facts": {
"example": "one"
},
...(snip)...
"item": "one"
},
{
"ansible_facts": {
"example": "two"
},
...(snip)...
"item": "two"
},
{
"ansible_facts": {
"example": "three"
},
...(snip)...
"item": "three"
}
]
}
]
}
Dictionaryの統合
combine filterを用いることによって、Dictをマージすることができる。 たとえば、以下のような例を示します。
# task
vars:
example_dict:
{
'one': 1,
'two': 2
}
tasks:
- set_fact:
result: "{{ example_dict | combine({'three':3}, recursive=True) }}"
- debug:
msg:
- "{{ result }}"
# 実行時
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": [
{
"one": 1,
"three": 3,
"two": 2
}
]
}
統合されたDictの結果が返却されることが確認できます。 recursiveオプションを有効にすると、同じ変数名があった場合でも、異なる値のものは上書きではなくマージする動きとなります。
まとめ
今回はAnsibleの書き方におけるTipsについてまとめてみました。記事の中で使用しているansible moduleには他にも様々なmoduleやpluginがあったり、色んな書き方がDocsには記載されていたりします。
こんな使い方も出来るのかなど、参考になれば幸いです。
https://docs.ansible.com/ansible/2.9_ja/modules/modules_by_category.html#modules-by-category
https://docs.ansible.com/ansible/2.9_ja/plugins/plugins.htmlc

