Ansible Tips: 統合_変数の登録

こんにちは。サイオステクノロジーの塙です。

こちらでは、Ansibleの書き方・Tipsについて説明しています。Ansibleとはどういったものなのかについては前提知識としており、初心者の方には入門編などの記事を閲読してからをおすすめします。

【連載】Ansible入門 その1:Ansibleとは

【連載】Ansible入門 その2:環境構築編

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

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です