首页 > 解决方案 > 在 Ansible 的变量中使用 with_items

问题描述

在下面的代码中,我使用 Ansible 模板,将其复制到多个位置。模板中还有一个变量:{{user}}。这应该分别替换为 - imail1,imail2,imail3,imail4。item.user 由于某种原因没有被替换,但没有抛出任何错误。我查看了多个选项,例如将其定义为 dict ,但没有一个适合这里。谁能帮我理解我做错了什么?

- 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 }

添加使用 {{user}} 变量的模板 logback.xml.j2 片段。

<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">

标签: ansibleansible-template

解决方案


问题出在我的语法上。我用“{{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 }

推荐阅读