1
template/file.cfg.j2

このテンプレート ファイルには、3 つのボックス間で共有される基本的な行が含まれます。各ボックスに固有の行にいくつかの違いがあります。これは変数化したい値です。

set system user nsroot 546426471446579744 -encrypted

546... ハッシュは{{ }}、インスタンス間で異なるため、変数に含まれている必要があります。{{ item.hash}}

それを設定して構造化する方法、必要かinclude_varsなどについてのアプローチが必要です。

編集:私が持っているもの:

vars/vars.yml

servers
   ns:
     - name: Copy hash
       hash: 187f637f107bf7265069ace04bf87fcd8e63923169a2c529a

playbook.yml

  tasks:
    - name: Variable:ize
      template: src=templates/template.j2 dest=/tmp mode=644 owner=root group=wheel
      with_items: servers[ansible_hostname]
4

1 に答える 1

2

インベントリ ファイルでは、次のようにします。

host1 nsroot_hash=12345
host2 nsroot_hash=54321
host3 nsroot_hash=24680

そして、あなたの template/file.cfg.j2 は次のようになります:

set system user nsroot {{ nsroot_hash }} -encrypted

編集:hashこのタスクを実行するホストごとに異なる値が必要なため、インベントリ ファイルで変数を定義する必要があります。したがって、インベントリ(host_vars) ファイルは次のようになりnsます (サーバーの 1 つの名前だと思います)。

ns hash=187f637f107bf7265069ace04bf87fcd8e63923169a2c529a

そうすると、playbook.yml は単純に次のようになります。

- hosts: all
  tasks:
    - name: Variable:ize
      template: src=templates/template.j2 dest=/tmp/template.txt mode=644 owner=root group=wheel

with_itemsステートメントは必要ないことに注意してください。上記の場合、それnsがホストの名前であると仮定すると、テンプレート化されたテキストを含むファイル /tmp/template.txt が作成されます。dest(ディレクトリへのパスではなく、ファイルへのパスであることに注意してください。)

このタスクを複数のホストに適用する場合は、上記のようにインベントリ ファイルを編集するだけです。

ns hash=187f637f107bf7265069ace04bf87fcd8e63923169a2c529a
aa hash=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bb hash=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

上記の playbook.yml ファイルを実行すると、ns、aa、bb の 3 つのホストすべてにテンプレートが適用され、各ホストのファイルに適切なハッシュ値が設定されます。

于 2015-10-20T12:57:36.540 に答える