質問: 下記のようなAnsibleのPlaybookをもとにroleを作ろうとしています。 ``` --- - hosts: hostA become_user: userA vars_prompt: (Ansibleのバージョンは2.2を想定しています) ``` この場合、become_userやvars_promptはroleを構成するファイル群のなかのどこに記載すればいいのでしょうか? まずbecome_userは個人的にはroleのtasks/main.ymlにタスクごとに ``` --- - name: taskA module1: arg1 become_user: userA - name: taskB module2: arg2 become_user: userA ``` と記載するか、記載せずにansible-playbook --become-user userAで意図する動作を得ることはできました。 ただ、become_user: userAをrole内に1箇所だけ記載して role全体の処理を実行していく方法があれば知りたいと思っています。 vars_promptについては色々触って見た結果、現時点ではroleの中では定義できず、 roleを呼び出す側のPlaybook(site.ymlなど)で定義しないといけないかと思っています。 ただ、特定のrole内だけで使いたいのでroleで定義する方法があれば知りたいと思っています。 どうぞ宜しくお願い致します。
回答: become_userをroleごとに使用したければroleの呼び出し元に書く必要がありますし、vars_promptはplayごとにしか使用できないのでこちらも呼び出し元にしか書けません。 なので別の手を使います。 become_userをroleごとに定義したければ(role名)/vars/main.ymlか(role名)/defaults/main.ymlに「ansible_become_user」という変数で定義しておけば良いです。 vars_promptは代わりに(多少挙動は変わりますが)pauseモジュールをregisterと共に使用して(registerの変数名).user_inputで取り出しましょう。 ただし、変数のスコープはplayなので、同じplay内の他のroleに値を伝播させたくなければset_factあたりで値を消しておく必要があります。