2017-10-18 8 views
0

私のプレイブックに別のプレイヤーを追加する際に問題があります。私は、プレーブックを使用してクリーンなVMを展開します。その後、別のプレイブックを実行して、特定の方法でVMを設定したいと思います。新しいホストをインベントリに追加し、sshにアクセスしました。には、別のホストで定義されている変数名のプレイブックが含まれています。

私たちのチームは、サーバータイプごとにプロジェクトを設定しています。私は初期段階(localhostに対して実行中)にプロジェクトへの正しいパスを取得し、set_factを使用して "servertype_project"に配置しました。 私は(新しいVMに対して実行されている、脚本レベルで)これが機能することを期待:

- name: "Run servertype playbook ({{ project }}) on VM" 
vars: 
    project: "{{ hostvars['localhost']['servertype_project'] }}" 
include: "{{ project }}/ansible/playbook.yml" 

をしかし、それはこのメッセージに構文チェックを失敗します。

ERROR! {{HOSTVARSは[ 'ローカルホスト'] [ 'servertype_project']}}: 'HOSTVARS' は未定義

私は{{HOSTVARS [ 'ローカルホスト'] [ 'servertype_project']を参照する場合、私は右の文字列を取得することができ}}}、しかし私は別のプレイブックを含めることができるレベルからではありません。

実行時に値が決まるので、set_factは変数を保存する正しい方法だと思いますが、ホスト固有のものです。私はそれをこのホストにも渡すことができる方法はありますか?あるいは、グローバルなvarのようなオプションが欠けていましたか?

答えて

1

あなたは何も欠けていません。これは予想されます。事実はホストに縛られており、hostvarsはプレイブックの範囲でアクセスできません。

include宣言でアクセス可能な変数を定義する方法はありません。ただし、CLIでextra-vars引数として渡すことはできません。しかし、インメモリインベントリを使用する場合(合理的な前提です)、別のansible-playbookインスタンスを呼び出すことは問題になりません。

私はあなたの流れを再考し、動的に定義されたプレイを含む代わりに、メモリ内インベントリに対して静的に定義されたプレイを実行し、条件付きでロールを含めるべきだと思います。

関連する問題