Ansible Tips: 統合_変数の登録

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

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

こちらでは、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

アバター画像
About nha 9 Articles
2023年にSIOSへ入社。前職では、インフラでOSS系をメインとしたシステム構築や自動化系(CI/CD)のタスクに従事。コードもたまに書いてます。コンテナを中心とした対応を行っています。

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

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

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


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる