在 Ansible 的变量中使用 with_items
Using with_items in Variable in Ansible
在下面的代码中,我使用 Ansible 模板,将其复制到多个位置。该模板中还有一个变量:{{user}}。这应该分别替换为 - imail1、imail2、imail3、imail4。 item.user 由于某种原因没有被替换,但没有抛出任何错误。我已经查看了多个选项,例如将其定义为 dict ,但其中 none 适合此处。谁能帮我理解我做错了什么?
- name: Configure logback file for imail1
template:
src: /etc/ansible/roles/Buildout/files/logback.xml.j2
dest: '/opt/"{{item.dest}}"/cassandra-meta/apache-cassandra-3.11.5/conf/logback.xml'
owner: "{{item.owner}}"
group: "{{item.group}}"
vars:
user: "{{item.user}}"
with_items:
- { dest: imail1, owner: imail1, group: imail1, user: imail1 }
- { dest: imail2, owner: imail2, group: imail2, user: imail2 }
- { dest: imail3, owner: imail3, group: imail3, user: imail3 }
- { dest: imail4, owner: imail4, group: imail4, user: imail4 }
添加模板片段 - logback.xml.j2,其中使用了 {{user}} 变量。
<configuration scan="true">
<jmxConfigurator />
<!-- No shutdown hook; we run it ourselves in StorageService after shutdown -->
<!-- SYSTEMLOG rolling file appender to system.log (INFO level) -->
<appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<file>/opt/{{user}}/cassandra-meta/log/system.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/opt/{{user}}/cassandra-meta/log/system.log.%i.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>20</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
问题出在我的语法上。我用“{{item.dest}}”引了引号。
正确的代码是:
- name: Configure logback file for imail1
template:
src: /etc/ansible/roles/Buildout/files/logback.xml.j2
dest: '/opt/{{item.dest}}/cassandra-meta/apache-cassandra-3.11.5/conf/logback.xml'
owner: "{{item.owner}}"
group: "{{item.group}}"
vars:
user: "{{item.user}}"
with_items:
- { dest: imail1, owner: imail1, group: imail1, user: imail1 }
- { dest: imail2, owner: imail2, group: imail2, user: imail2 }
- { dest: imail3, owner: imail3, group: imail3, user: imail3 }
- { dest: imail4, owner: imail4, group: imail4, user: imail4 }
在下面的代码中,我使用 Ansible 模板,将其复制到多个位置。该模板中还有一个变量:{{user}}。这应该分别替换为 - imail1、imail2、imail3、imail4。 item.user 由于某种原因没有被替换,但没有抛出任何错误。我已经查看了多个选项,例如将其定义为 dict ,但其中 none 适合此处。谁能帮我理解我做错了什么?
- name: Configure logback file for imail1
template:
src: /etc/ansible/roles/Buildout/files/logback.xml.j2
dest: '/opt/"{{item.dest}}"/cassandra-meta/apache-cassandra-3.11.5/conf/logback.xml'
owner: "{{item.owner}}"
group: "{{item.group}}"
vars:
user: "{{item.user}}"
with_items:
- { dest: imail1, owner: imail1, group: imail1, user: imail1 }
- { dest: imail2, owner: imail2, group: imail2, user: imail2 }
- { dest: imail3, owner: imail3, group: imail3, user: imail3 }
- { dest: imail4, owner: imail4, group: imail4, user: imail4 }
添加模板片段 - logback.xml.j2,其中使用了 {{user}} 变量。
<configuration scan="true">
<jmxConfigurator />
<!-- No shutdown hook; we run it ourselves in StorageService after shutdown -->
<!-- SYSTEMLOG rolling file appender to system.log (INFO level) -->
<appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<file>/opt/{{user}}/cassandra-meta/log/system.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/opt/{{user}}/cassandra-meta/log/system.log.%i.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>20</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
问题出在我的语法上。我用“{{item.dest}}”引了引号。 正确的代码是:
- name: Configure logback file for imail1
template:
src: /etc/ansible/roles/Buildout/files/logback.xml.j2
dest: '/opt/{{item.dest}}/cassandra-meta/apache-cassandra-3.11.5/conf/logback.xml'
owner: "{{item.owner}}"
group: "{{item.group}}"
vars:
user: "{{item.user}}"
with_items:
- { dest: imail1, owner: imail1, group: imail1, user: imail1 }
- { dest: imail2, owner: imail2, group: imail2, user: imail2 }
- { dest: imail3, owner: imail3, group: imail3, user: imail3 }
- { dest: imail4, owner: imail4, group: imail4, user: imail4 }