質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

1回答

408閲覧

Ansible extra-varsで指定した変数から紐づけした別の変数を自動的に取り込みたい

khaii21

総合スコア67

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2023/08/18 12:52

編集2023/08/19 06:09

実現したいこと

main.ymlに「tokyo」「osaka」「nagoya」のキーでホストを2台ずつ紐づけしています。
3つのグループ配下のホストに対して、さらに個別の変数を紐づけしたいです。

現在下記のようなコマンドにて、グループを指定して対象ホストを取り込んでいます。

playbook.yml

1 vars_files: 2 - ../roles/hoge/vars/main.yml 3 4 tasks: 5 - name: "Check" 6 ansible.builtin.command: check_hoge_status "{{ item }}" 7 with_items: 8 - "{{ host_list[server_group] }}"

vars/main.yml

1host_list: 2 tokyo: 3 - tokyo01.co.jp 4 - tokyo02.co.jp 5 osaka: 6 - osaka03.co.jp 7 - osaka04.co.jp 8 nagoya: 9 - nagoya05.co.jp 10 - nagoya06.co.jp

実行するコマンド

$ ansible-playbook playbook.yml -e "server_group=tokyo"

上記の場合、 {{ item }} には「tokyo01.co.jp」と「tokyo02.co.jp」が代入されます。

実現したい事ですが、extra-varsで引数に指定した値(server_group=tokyo)を元に別の変数を自動的に読み出したいです。
自動的に紐づけする変数ですが、仮に「area」という変数を用意してserver_groupで指定した値から「area」に代入したいです。
例えば下記のように「area」という変数を設定しておいて、

ansible.builtin.command: check_hoge_status "{{ item }}" "{{ area }}"

「server_group=tokyo」の場合「area」に「kanto」代入する
「server_group=osaka」の場合「area」に「kansai」代入する
「server_group=osaka」の場合「area」に「cyubu」代入する

with_itemsの機能を利用すれば可能な気がするのですが、色々試しても上手くいきませんでした。
同じmain.ymlに変数を設定して可能となる方法をご存知でしたらご教授頂けないでしょうか。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

vars/main.yml の方に手を入れるようですが、以下の形でいかがでしょうか。

yaml

1--- 2- hosts: localhost 3 gather_facts: false 4 connection: local 5 6 vars: 7 host_list: 8 tokyo: 9 hosts: 10 - tokyo01.co.jp 11 - tokyo02.co.jp 12 area: kanto 13 osaka: 14 hosts: 15 - osaka03.co.jp 16 - osaka04.co.jp 17 area: kansai 18 nagoya: 19 hosts: 20 - nagoya05.co.jp 21 - nagoya06.co.jp 22 area: cyubu 23 24 tasks: 25 - name: "Check" 26 ansible.builtin.command: check_hoge_status "{{ item }} {{ host_list[server_group].area }}" 27 loop: "{{ host_list[server_group].hosts }}"

投稿2023/08/18 13:19

編集2023/08/18 13:22
yabusakadeny

総合スコア186

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yabusakadeny

2023/08/18 13:30

すみません vars/main.yml として書くべき変数を、テスト目的で Playbook 内の vars に書いてしまいました。読み替えていただければと思います。
khaii21

2023/08/18 13:31

ご確認ありがとうございます。 スキル不足で申し訳ございません。 ご教授頂いた記載方法は、そのままvarsのymlに登録しても問題無さそうでしょうか。 実はhostsに該当するホストは1000台以上となり、グループも数百になる見込みです。 playbookに記載するとかなりの行数となるため、可能であればvarsのymlファイルに分けたいと考えていました。
yabusakadeny

2023/08/18 13:35

はい、元の Playbook 通り ``` vars_files: - ../roles/hoge/vars/main.yml ``` として、私の Playbook の vars はまるごと削除し、 vars/main.yml に以下の定義をするイメージです。 ``` host_list: tokyo: hosts: - tokyo01.co.jp - tokyo02.co.jp area: kanto osaka: hosts: - osaka03.co.jp - osaka04.co.jp area: kansai nagoya: hosts: - nagoya05.co.jp - nagoya06.co.jp area: cyubu ```
yabusakadeny

2023/08/18 13:36

コメントだと、yaml のインデントが潰れてしまうので、読み替えてください・・
khaii21

2023/08/18 13:39 編集

ご確認ありがとうございます。 今日は遅い時間になりましたので検証が出来ませんので、検証後返答させて頂きます。 ありがとうございます。
khaii21

2023/08/19 03:45 編集

ご教授頂きました内容を確認しました。 期待通りの結果となりました。 とても助かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問