【问题标题】:Ansible loop : How can I loop through the array using with_sequence for indexAnsible 循环:如何使用 with_sequence 循环遍历数组作为索引
【发布时间】:2018-11-02 22:55:48
【问题描述】:

我有多个长度相同的数组。我需要遍历长度并调用元素。我尝试了以下一个但失败了。你能告诉我我在哪里做错了吗?或者有没有更好的方法来遍历数组元素。

  tasks:
  - name: Set facts
    set_fact:
      SERIAL_NUMBER: ['2342', '4455', '5643']
      PASSWORD: ['xxx', 'yyy', 'zzz']
      EXP_DATE: ['06-10-18', '07-01-19', '06-01-18']
      LICENSE_TYPE: "evaluation"

 - name: Execute the script to apply evaluation license
    lineinfile:
      dest: "/root/test.txt"
      line: "{{ SERIAL_NUMBER[{{ item }}] }} {{ PASSWORD[{{ item }}] }} {{ EXP_DATE[{{ item }}] }}"
      create: yes
    with_sequence: start=0 end={{ SERIAL_NUMBER|length }}
    when: "{{ LICENSE_TYPE }}" == "evaluation"

我什至尝试了以下方法来代替 line:。但没有运气。

line: "{{ SERIAL_NUMBER[item]int % SERIAL_NUMBER|length }} {{ PASSWORD[item]int % PASSWORD|length }} {{ EXP_DATE[item]int % EXP_DATE|length }}"

我在这里看到 2 个问题。

  1. 在花括号内调用花括号的数组元素 {{ {{ }} }}。
  2. 第二个是在这种情况下使用“when”。

谢谢。

【问题讨论】:

  • 错误信息:TASK [Execute the script to apply evaluation license] ******************************************************************************************** fatal: [10.75.44.199]: FAILED! => {"msg": "template error while templating string: expected token ':', got '}'. String: {{ SERIAL_NUMBER[{{ item }}] }}"}

标签: arrays loops ansible .when ansible-template


【解决方案1】:

您可以将query 函数与together 结合使用,在同一循环迭代中获取每个数组的第一个元素。

when 语法应该是:

when: LICENSE_TYPE == "evaluation"

请检查以下任务(使用debug 模块仅演示query 提供给循环的数据):

---
- hosts: localhost
  connection: local
  gather_facts: false
  vars:

  tasks:
    - name: Set facts
      set_fact:
        SERIAL_NUMBER: ['2342', '4455', '5643']
        PASSWORD: ['xxx', 'yyy', 'zzz']
        EXP_DATE: ['06-10-18', '07-01-19', '06-01-18']
        LICENSE_TYPE: "evaluation"


    - name: Execute the script to apply evaluation license
      debug:
        msg: "SERIAL_NUMBER: {{ item[0] }}, PASSWORD: {{ item[1] }}, EXP_DATE: {{ item[2] }}"
      when: LICENSE_TYPE == "evaluation"
      loop: "{{ query('together', SERIAL_NUMBER, PASSWORD, EXP_DATE) }}"

输出:

PLAY [localhost] ****************************************************************************************************************************************************************************************************

TASK [Set facts] ****************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Execute the script to apply evaluation license] ***************************************************************************************************************************************************************
ok: [localhost] => (item=None) => {
    "msg": "SERIAL_NUMBER: 2342, PASSWORD: xxx, EXP_DATE: 06-10-18"
}
ok: [localhost] => (item=None) => {
    "msg": "SERIAL_NUMBER: 4455, PASSWORD: yyy, EXP_DATE: 07-01-19"
}
ok: [localhost] => (item=None) => {
    "msg": "SERIAL_NUMBER: 5643, PASSWORD: zzz, EXP_DATE: 06-01-18"
}

PLAY RECAP **********************************************************************************************************************************************************************************************************
localhost 

希望对你有帮助

【讨论】:

    【解决方案2】:

    你可以试试这个。祝你好运

      tasks:
      - name: Set facts
        set_fact:
          SERIAL_NUMBER: ['2342', '4455', '5643']
          PASSWORD: ['xxx', 'yyy', 'zzz']
          EXP_DATE: ['06-10-18', '07-01-19', '06-01-18']
          LICENSE_TYPE: "evaluation"
    
     - name: Execute the script to apply evaluation license
        lineinfile:
          dest: "/root/test.txt"
          line: "{{ SERIAL_NUMBER[index] }} {{ PASSWORD[index] }} {{ EXP_DATE[index] }}"
          create: yes
        loop: "{{ SERIAL_NUMBER|flatten(levels=1) }}"
        loop_control:
          index_var: index
        when: "{{ LICENSE_TYPE }}" == "evaluation"
    

    【讨论】:

    • 您应该为您的代码添加解释。可以很简短。
    猜你喜欢
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2020-07-28
    相关资源
    最近更新 更多