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
Ansible模板和jinja{%block%}_Ansible_Ansible 2.x_Ansible Template - Fatal编程技术网

Ansible模板和jinja{%block%}

Ansible模板和jinja{%block%},ansible,ansible-2.x,ansible-template,Ansible,Ansible 2.x,Ansible Template,我需要在远程主机上使用多个模板文件和我的Ansible角色中的Jinja的{%block block\u name%}生成一个文件 比如说, main.conf.j2: value1 = 123 value2 = 456 {% block test %} {% endblock %} value3 = 789 {% block example %} {% endblock %} value4 = abcd test.conf.j2: {% block test %} more text

我需要在远程主机上使用多个模板文件和我的Ansible角色中的Jinja的
{%block block\u name%}
生成一个文件

比如说,

main.conf.j2:

value1 = 123
value2 = 456

{% block test %} {% endblock %}

value3 = 789

{% block example %} {% endblock %}

value4 = abcd
test.conf.j2:

{% block test %}
more text here
{% endblock %}
example.conf.j2

{% block example %}
....
example_param = 'example!'
....
{% endblock %}
下一步是什么?我必须在test.conf.j2和example.conf.j2中使用
{%extends'nginx.conf.j2%}
?如果是这样的话,我的任务将如何?或者别的什么

如果我尝试这样的事情:

- name: Copy config
  template:
    src: "{{ item }}"
    dest: "{{ conf_file_path }}"
  with_items:
    - "main.conf.j2"
    - "test.conf.j2"
    - "example.conf.j2"
    - "abcd.conf.j2"
它仅适用于main.conf.j2和test.conf.j2,但忽略example.conf.j2和其他模板

问:“下一步是什么?我必须使用{%extends'nginx.conf.j2%}…”

A:是的。这是需要的。比如说

-模板:
src:test.j2
目的地:测试
使用模板

shell>cat main.j2
值1=123
{%block test%}
value=main.j2中的默认值
{%endblock%}
值3=789
shell>cat test.j2
{%extends'main.j2%}
{%block test%}
值=test.j2中的自定义值
{%endblock%}
给予

shell>cat测试
值1=123
值=test.j2中的自定义值
值3=789

问:“我的任务看起来怎么样?”

-名称:复制配置
模板:
src:“{{item}}”
dest:{{conf_file_path}}
有以下项目:
-“main.conf.j2”
-“test.conf.j2”
-“example.conf.j2”
-“abcd.conf.j2”
答:循环将在每次迭代中重复覆盖dest文件。看


FWIW。可以使用和循环模板的名称。比如说

-模板:
src:main2.j2
目的地:测试
-区块填充:
标记:“#{mark}ANSIBLE托管块{{item}”
路径:测试
块:“{{lookup('template',item)}}”
循环:
-test.conf.j2
-example.conf.j2
使用模板

shell>cat main2.j2
值1=123
#开始ANSIBLE托管块测试。conf.j2
value_test=main2.j2中的默认值
#结束ANSIBLE托管块测试.conf.j2
#开始ANSIBLE托管块example.conf.j2
value_示例=main2.j2中的默认值
#END ANSIBLE托管块example.conf.j2
值3=789
shell>cat test.conf.j2
value_test=test.conf.j2中的自定义值
shell>cat example.conf.j2
value_example=example.conf.j2中的自定义值
给予

shell>cat测试
值1=123
#开始ANSIBLE托管块测试。conf.j2
value_test=test.conf.j2中的自定义值
#结束ANSIBLE托管块测试.conf.j2
#开始ANSIBLE托管块example.conf.j2
value_example=example.conf.j2中的自定义值
#END ANSIBLE托管块example.conf.j2
值3=789