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

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

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

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

Q&A

1回答

663閲覧

Ansibleで実行しないymlファイルの変数がチェックされてしまう

tsumikuma3

総合スコア0

Ansible

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

0グッド

0クリップ

投稿2022/07/08 04:43

編集2022/07/08 05:48

Ansibleのplaybookの挙動でどうしても分からない点がありましたので質問させていただきます

■実現したいこと

Ansibleでロールを実行する際、タグを指定して任意のymlを実行したい。
かつ、実行されたymlで動的に変数を読み込みたい。

(1)ロールを実行するファイル
/ansible/hoge.yml

  • name: "hogeロールの実行"
    tasks:
    • include_role:
      name: hoge
    tags: [ never, A , B ]

(2)処理のフローを記載するmainファイル
/ansible/roles/hoge/tasks/main.yml

  • import_tasks: tasks/A.yml
    tags: [ never, A ]
  • import_tasks: tasks/B.yml
    tags: [ never, B ]

(3)処理の中身を記載するtasksファイル。この中で動的に変数を読み込みたい
/roles/tasks/B.yml

  • name: "変数読み込み"
    include_vars: /roles/hoge/vars/{{ DB_instances }}.yml
  • name: "処理B"
    tasks:
    <<略>> ({{DB_instances}}.yml内に定義した変数を使用)

■困っている事

この状況でansible-playbook -i hosts hoge.yml --tags "A" をオプションに実行した場合、
Aのタグを持つA.ymlは正常に実行され、B.ymlは実行されません。しかし、何故かB.ymlの変数のチェックだけは行われてしまいます。
B.ymlは実行されないのでinclude_varsは実行されず、変数のチェックのみが行われ変数の未定義エラーになります

■質問内容、知りたい事

①プレイブックをどのように変更すれば実現したいことが達成できるか
②(必須ではない)なぜ指定したタグを持たないymlファイルの変数がチェックされてしまうのか

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

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

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

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

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

tsumikuma3

2022/07/08 04:45

ansibleのバージョンは最新の2.9です
guest

回答1

0

パッと見気になったのが、

yaml

1name: "hogeロールの実行" 2tasks: 3 include_role: 4 name: hoge 5 tags: [ never, A , B ]

で hogeロールを呼び出しているので、

yaml

1name: "変数読み込み" 2include_vars: /roles/hoge/vars/{{ DB_instances }}.yml

がhogeのデフォルト変数(vars)に配置しているために呼び出されたと思います。
問題の切り分けとして、一度この {{ DB_instances }}.ymlをhogeロール外のディレクトリに移動し、呼び出すように修正してみてくださいませ。

投稿2022/07/08 05:29

comefigo

総合スコア1045

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

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

tsumikuma3

2022/07/08 05:39

ご回答いただきありがとうございます。 わかりにくくて申し訳ありません。 指定したタグを含んでいないので、include_vars: /roles/hoge/vars/{{ DB_instances }}.ymlは機能していません。(そもそも/roles/*/vars/main.yml、/roles/*/vars/all.yml以外は読み込まれない理解です) 機能していないのに何故か変数チェックだけが行われるため name: "処理B" tasks: <<略>> ({{DB_instances内}}.yml内の変数を使用。{{ DB_userlist }}など) で{{ DB_userlist }}が未定義エラーとなる。という状況です。
comefigo

2022/07/08 09:24

なるほどです。 -------------- name: "処理B" tasks: -------------- は tasks/B.yml にかかれていますか? パッと見playbookのように見受けられますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問