模板中的 Ansible 变量

Ansible variables in template

template/file.cfg.j2

此模板文件将包含将在三个框之间共享的基本行。每个盒子的线条会有一些差异。这是我希望的值 variable:ize.

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]

在您的清单文件中,您需要执行如下操作:

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

然后您的 template/file.cfg.j2 将如下所示:

set system user nsroot {{ nsroot_hash }} -encrypted

编辑:您希望在您的清单文件中定义 hash 变量,因为您希望针对每个要针对 运行 此任务的主机使用不同的值。所以你的 inventory (host_vars) 文件应该看起来像这样(我假设 ns 是你的其中一台服务器的名称):

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,并将正确的哈希值放入每个主机上的文件中.