Ansible 模板中的可分解变量
此模板文件将包含三个框之间共享的基本行。每一个方框的线条都会有一些不同。这是一个我希望变量:ize的值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: -
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目录。