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

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

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

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

Q&A

解決済

2回答

884閲覧

Ansible ansible-playbookコマンド実行の際に--extra-varsを使って引数で渡す値を登録済みの変数として扱いたい

khaii21

総合スコア67

Ansible

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

0グッド

0クリップ

投稿2023/08/15 06:18

編集2023/08/15 06:20

実現したいこと

実行するコマンド

ansible-playbook playbook.yml -e "server_group=group1"

vars/main.ymlに登録している変数group1として引数を取得したいです。
まず最初に引数(server_group=group1)を指定して、変数hoge_groupにgroup1を代入します。

playbook 14行目のecho "{{ hoge_group }}" は echo "{{ group1 }}"となることを想定しており
実行結果は hoge1.co.jp と hoge2.co.jp が出力されることを期待しているのですが
実際の結果は group1 がそのまま出力されます。
変数group1として取得出来る方法がありましたらご教授頂けないでしょうか。
宜しくお願い致します。

期待する実行結果

hoge1.co.jp hoge2.co.jp

実際の実行結果

group1

該当のソースコード

playbook.yml

1--- 2- name: Release Playbook 3 hosts: localhost 4 gather_facts: false 5 6 vars_files:group1 7 - ./roles/hoge/vars/main.yml 8 9 vars: 10 hoge_group: "{{ server_group }}" 11 12 tasks: 13 - name: Echo 14 ansible.builtin.command: echo "{{ hoge_group }}" 15 register: hoge_echo 16 - name: Result 17 ansible.builtin.debug: 18 msg: "{{ hoge_echo }}"

vars/main.yml

1--- 2group1: 3 - hoge1.co.jp 4 - hoge2.co.jp

 試したこと

msg: "{{ group1 }}" を直接playbookに記載して確認すると、きちんと下記のように変数が展開されます。

hoge1.co.jp hoge2.co.jp

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

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

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

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

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

guest

回答2

0

ベストアンサー

- name: Echo ansible.builtin.command: echo "{{ server_group }}"

上記のように直接server_groupを使用しない理由はありますか?
どうしても途中で別の変数(hoge_group)に代入したい場合は、set_factで変数を定義してみてください。

投稿2023/08/15 06:48

comefigo

総合スコア1051

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

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

khaii21

2023/08/15 06:58

ご確認ありがとうございます。 すみません。記載していませんでしたが、最初はご指摘のありました直接server_groupを指定して 確認していたのですが同様にgroup1が直接出力されてしまい、 一度別の変数に代入する必要があるのかもしれないと思いまして2段階に分けていました。 ご教授頂きましたset_factを試してみたのですが、結果は同様にgroup1が直接出力されました。 何か他に気になる事がありましたら御指摘頂けますと幸いです。
comefigo

2023/08/15 10:47 編集

--- group1:  - hoge1.co.jp  - hoge2.co.jp を↓のようにしましょう ------ test:  group1:  - hoge1.co.jp   - hoge2.co.jp そして、 debug: msg="{{ test[server_group] }}" でhoge1.co.jpとhoge2.co.jpが表示されることを確認してみてください。 group1という変数とserver_group変数の中に入っているgroup1という文字列で動的に取得するには、group1というキー値にすることで解決可能です。キー値になるようにtest変数内に含めました。
khaii21

2023/08/15 13:05

ご確認ありがとうございます。 ご教授頂いた方法で期待する結果を取得できました。 とても勉強になりました。 大変助かりました。
comefigo

2023/08/15 13:26

解決できてよかったです。
guest

0

vars lookup plugin を使うパターンでいかがでしょうか。

yaml

1--- 2- name: Release Playbook 3 hosts: localhost 4 gather_facts: false 5 6 vars_files: 7 - ./roles/hoge/vars/main.yml 8 9 tasks: 10 - name: Echo 11 ansible.builtin.command: echo "{{ lookup('vars', server_group) }}" 12 register: hoge_echo 13 - name: Result 14 ansible.builtin.debug: 15 msg: "{{ hoge_echo }}"

投稿2023/08/15 11:17

yabusakadeny

総合スコア186

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問