Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/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
Templates Ansible模板:尝试索引到两级列表中_Templates_Ansible_Jinja2 - Fatal编程技术网

Templates Ansible模板:尝试索引到两级列表中

Templates Ansible模板:尝试索引到两级列表中,templates,ansible,jinja2,Templates,Ansible,Jinja2,在Ansible中,我试图对apache虚拟主机配置进行模板化,每个文件一个 我有一个jinja模板,其中包含以下内容: ... DocumentRoot {{ mydomain.DocumentRoot }} ... 我有一个调用模板的剧本,其中包含: vars: domain1: DocumentRoot: /var/www/html/domain1 domain2: DocumentRoot: /var/www/html/domain2 我希望能够推出这个模板

在Ansible中,我试图对apache虚拟主机配置进行模板化,每个文件一个

我有一个jinja模板,其中包含以下内容:

...
DocumentRoot {{ mydomain.DocumentRoot }}
...
我有一个调用模板的剧本,其中包含:

vars:
  domain1:
    DocumentRoot: /var/www/html/domain1
  domain2: 
    DocumentRoot: /var/www/html/domain2
我希望能够推出这个模板,在domain1和domain2之间进行选择,以选择DocumentRoot(以及其他未显示的变量)

所以我需要在我的模板中写下,mydomain应该被“domain1”或“domain2”替换

除此之外,我还试过

ansible-playbook myplaybook.yml  -e mydomain=domain1
没有运气

我需要某种间接变量,但我不知道如何编写它,甚至不知道是否可能

我知道我应该能够迭代数组的内容,所以为什么我不能构造一个简单的间接寻址呢


有什么方法可以做到这一点吗?

您可以使用模板中的条件,根据
mydomain
的值设置
DocumentRoot

一种简单的方法是直接使用模板中
mydomain
的值,如果这是唯一的配置:

例如:

DocumentRoot/var/www/html/{{mydomain}
根据使用
-e mydomain=
传递的内容,这将导致:

DocumentRoot /var/www/html/domain1

或者,如果存在特定于域的其他参数,则可以在模板中设置条件。考虑下面的示例模板:

{%if mydomain=='domain1%}
其他设置xyz
DocumentRoot/var/www/html/{{mydomain}
{%elif mydomain=='domain2%}
其他设置abc
DocumentRoot/var/www/html/{{mydomain}
{%endif%}

当您使用
-e“mydomain=domain1”
运行playbook时,它将呈现前两行。对于
domain2
,它将匹配
elif
语句并呈现适当的行。

创建词典列表会更容易。比如说

vars:
apache_vhost:
-服务器名:域1
DocumentRoot:/var/www/html/domain1
-服务器名:域2
DocumentRoot:/var/www/html/domain2
然后是下面的任务

-模板:
src:vhost.j2
dest:{apache_conf_path}}/extra/{{item.ServerName}}.conf”
循环:“{apache_vhost}}”
通知:重新加载apache
模板呢

     <VirtualHost *:80>
     ServerName {{ item.ServerName }}
     DocumentRoot {{ item.DocumentRoot }}
     </VirtualHost>

服务器名{{item.ServerName}
DocumentRoot{{item.DocumentRoot}

将使用目录
extra
中的虚拟主机配置创建文件。查看如何为虚拟主机创建文件和目录,并在
httpd.conf

中包含额外的文件,这是我使用的方法。谢谢,谢谢你的贡献。
     <VirtualHost *:80>
     ServerName {{ item.ServerName }}
     DocumentRoot {{ item.DocumentRoot }}
     </VirtualHost>