29

私は長い間立ち往生しているダミーの疑いを持っています。ホストと変数を含む非常に平凡なインベントリ ファイルがあります。

[lb]
10.112.84.122

[tomcat]
10.112.84.124

[jboss5]
10.112.84.122

...

[tests:children]
lb
tomcat
jboss5

[default:children]
tests

[tests:vars]
data_base_user=NETWIN-4.3
data_base_password=NETWIN
data_base_encrypted_password=
data_base_host=10.112.69.48
data_base_port=1521
data_base_service=ssdenwdb
data_base_url=jdbc:oracle:thin:@10.112.69.48:1521/ssdenwdb

問題は、group_vars/all ファイルからインベントリ ファイル内のこれらすべてのホストと変数にアクセスする必要があることです。

ホストIPにアクセスするために次の方法を試しました:

{{ lb }}
"{{ hostvars[lb] }}"
"{{ hostvars['lb'] }}"
{{ hostvars[lb] }}

私が試したホスト変数にアクセスするには:

"{{ hostvars[tests].['data_base_host'] }}"

全部間違ってる!!!プレイブックではなく変数ファイルから、ホストと変数にアクセスするためのベストプラクティスを見つけるのを手伝ってくれる人はいますか?

編集:

Ok。明確にしましょう。

問題:変数ファイルのインベントリ ファイルで宣言されたホストを使用します。たとえば、group_vars/all です。

例:の DB ホストがありIP:10.112.83.37ます。

在庫ファイル:

[db]
10.112.83.37

group:vars/all ファイルで、その IP を使用して変数を作成します。

group_vars/all ファイル:

data_base_url=jdbc:oracle:thin:@{{ db }}:1521/ssdenwdb

テンプレートでは、group_vars/all ファイルに組み込まれた変数を使用します。

テンプレート ファイル:

oracle_url = {{ data_base_url }}

問題は{{ db }}、group_vars/all ファイル内の変数が DB ホスト IP に置き換えられていないことです。ユーザーは、インベントリ ファイルのみを編集できます。

4

7 に答える 7

21

たとえば、インベントリ エントリにプログラムでアクセスして、それらをタスクに含める場合。次のように参照できます。

{{ hostvars.tomcat }}

これにより、そのホストに関連するすべての変数を含む構造が返されます。IP アドレス (またはホスト名) だけが必要な場合は、次のように参照できます。

{{ hostvars.jboss5.ansible_ssh_host }}

参照できる変数のリストは次のとおりです。 をクリックします。さらに、変数を宣言して、たとえば Playbook のあるステップの結果を設定することもできます。

- name: Change owner and group of some file
  file: path=/tmp/my-file owner=new-owner group=new-group
  register: chown_result

次に、このステップを で再生すると、次のようtomcatにアクセスできます。jboss5

- name: Print out the result of chown
  debug: msg="{{ hostvars.tomcat.chown_result }}"
于 2014-08-20T16:28:45.310 に答える
17
于 2014-04-24T00:13:07.223 に答える
3

前の例を考えると:

在庫ファイル:

[db]
10.112.83.37

group_vars/all

data_base_url=jdbc:oracle:thin:@{{ db }}:1521/ssdenwdb

テンプレート ファイル:

oracle_url = {{ data_base_url }}

group_vars/all を次のように置き換えたいと思うかもしれません

data_base_url="jdbc:oracle:thin:@{{ groups['db'][0] }}:1521/ssdenwdb"
于 2016-09-27T11:06:38.127 に答える
0

タスクまたはロールで /etc/ansible/host の下に定義された 1 つのホストを参照する場合は、次のリンクが役立ちます。

https://www.middlewareinventory.com/blog/ansible-get-ip-address/

于 2020-09-14T14:55:36.363 に答える
-1

group_vars の下のファイルに変数を入れたい場合は、ここに移動してください。Vars はインベントリ ([ group :vars] セクション) にあるだけでなく、(何よりも)group_varsまたはの下のファイルにもありますhosts_vars

たとえば、上記の例では、グループの変数をtestsファイルに移動できgroup_vars/testsます。

在庫ファイル:

[lb]
10.112.84.122

[tomcat]
10.112.84.124

[jboss5]
10.112.84.122

...

[tests:children]
lb
tomcat
jboss5

[default:children]
tests

group_vars/testsファイル :

data_base_user=NETWIN-4.3
data_base_password=NETWIN
data_base_encrypted_password=
data_base_host=10.112.69.48
data_base_port=1521
data_base_service=ssdenwdb
data_base_url=jdbc:oracle:thin:@10.112.69.48:1521/ssdenwdb
于 2014-02-20T14:30:45.627 に答える