1
template/file.cfg.j2

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

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是您的其中一台服务器的名称):

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

于 2015-10-20T12:57:36.540 回答