Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 模板中的可分解变量_Ansible_Ansible Template - Fatal编程技术网

Ansible 模板中的可分解变量

Ansible 模板中的可分解变量,ansible,ansible-template,Ansible,Ansible Template,此模板文件将包含三个框之间共享的基本行。每一个方框的线条都会有一些不同。这是一个我希望变量:ize的值 template/file.cfg.j2 546。。。散列现在应该位于{{}变量中,因为它在实例之间会有所不同{{item.hash}} 我需要一种关于如何设置它和结构的方法,我是否需要包含变量等 编辑:我拥有的: vars/vars.yml set system user nsroot 546426471446579744 -encrypted servers ns: -

此模板文件将包含三个框之间共享的基本行。每一个方框的线条都会有一些不同。这是一个我希望变量:ize的值

template/file.cfg.j2
546。。。散列现在应该位于
{{}
变量中,因为它在实例之间会有所不同<代码>{{item.hash}}

我需要一种关于如何设置它和结构的方法,我是否需要
包含变量

编辑:我拥有的:

vars/vars.yml

set system user nsroot 546426471446579744 -encrypted
servers
   ns:
     - name: Copy hash
       hash: 187f637f107bf7265069ace04bf87fcd8e63923169a2c529a
playbook.yml

set system user nsroot 546426471446579744 -encrypted
servers
   ns:
     - name: Copy hash
       hash: 187f637f107bf7265069ace04bf87fcd8e63923169a2c529a

在库存文件中,您将需要执行以下操作:

  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
ns hash=187f637f107bf7265069ace04bf87fcd8e63923169a2c529a
然后您的模板/file.cfg.j2将如下所示:

  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
ns hash=187f637f107bf7265069ace04bf87fcd8e63923169a2c529a
编辑:您希望在清单文件中定义
散列
变量,因为您希望针对要运行此任务的每个主机使用不同的值。因此,您的(host_vars)文件应该如下所示(我假设
ns
是您的一台服务器的名称):

然后,您的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
ns hash=187f637f107bf7265069ace04bf87fcd8e63923169a2c529a
请注意,您不需要
with_items
语句。在上述情况下,假设
ns
是主机名,则将创建包含模板文本的文件/tmp/template.txt。(请注意,
dest
是指向文件的路径,而不仅仅是指向目录的路径。)

如果要将此任务应用于多台主机,则只需编辑清单文件,如上所示:

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

当您运行上述playbook.yml文件时,它会将模板应用于所有三个主机,ns、aa和bb,并在每个主机上的文件中放入适当的哈希值。

您可以在
host\u vars
文件中定义系统中的特定硬件差异。您的vars.yml文件中有语法错误。是熟悉yaml文件语法的好资源。至少您需要在“servers”之后加上“:”,但您可能希望vars.yml文件的结构也有所不同。看看我上面的编辑,没问题。虽然我的模板很大,并且包含其他静态哈希、IP和主机名。所以我不想将所有这些存储在清单文件中,而是将所有变量都存储在vars.yml中。它将以3个实例为目标,它们将具有唯一的哈希、IP和主机名。您可能需要查看host_vars(和group_vars)目录结构。它允许您将变量放入指定目录中的每个主机(或每个组)文件中。这样管理主机和组变量就容易多了。Ansibles文件简要介绍了它。我现在正在工作。虽然我不知道为什么我应该在清单主机文件以及主机变量/ns中使用哈希。它似乎只从我的主机清单文件中获取哈希值。如果删除hosts:10.1.2.3 nsroot_hash=187f中的行。。。它将生成一个错误:一个或多个未定义的变量:“nsroot\u hash”未定义。您不应该在这两个变量中都需要它。如果未识别出
主机\u vars/ns
,则可能未将其放置在正确的位置。它默认为/etc/ansible/host_vars/(假设您的清单文件是
/etc/ansible/hosts
),但是如果您通过
-i
命令行参数从不同的位置指定清单文件,则会在那里查找host_vars目录。