【问题标题】:Replace Empty Indexes of Ansible List with String用字符串替换 Ansible 列表的空索引
【发布时间】:2021-02-23 14:58:42
【问题描述】:

我的 ansible playbook 中有一个名为“inf_list_tmp”的列表,它看起来像:

{
"changed": false,
"ansible_facts": {
    "inf_list_tmp": [
        [],
        [],
        [
            "[dataLoaderJobTaskExecutor-7] - 02/23/2021 07:23:30 ES30CLIENT21  [EventHelperServiceImpl] INFO: Sending event notification [STARTED JOB] for tenant [ES30CLIENT21] with variables"
        ],
        [],
        [
            "[dataLoaderJobTaskExecutor-5] - 02/23/2021 07:23:33 ES30CLIENT21  [EventHelperServiceImpl] INFO: Sending event notification [STARTED JOB] for tenant [ES30CLIENT21] with variables"
        ],
        [],
        [
            "[dataLoaderJobTaskExecutor-8] - 02/23/2021 07:40:49 ES30CLIENT21  [EventHelperServiceImpl] INFO: Sending event notification [STARTED JOB] for tenant [ES30CLIENT21] with variables"
        ],
        [
            "[dataLoaderJobTaskExecutor-1] - 02/23/2021 07:41:21 ES30CLIENT21  [EventHelperServiceImpl] INFO: Sending event notification [STARTED JOB] for tenant [ES30CLIENT21] with variables "
        ]
    ]
},
"_ansible_no_log": false

}

现在我想用字符串 'STARTED JOB' 替换上面列表中的空索引

预期输出:

"inf_list_tmp": [
        [STARTED JOB],
        [STARTED JOB],
        [
            "[dataLoaderJobTaskExecutor-7] - 02/23/2021 07:23:30 ES30CLIENT21  [EventHelperServiceImpl] INFO: Sending event notification [STARTED JOB] for tenant [ES30CLIENT21] with variables"
        ],
        [STARTED JOB],
        [
            "[dataLoaderJobTaskExecutor-5] - 02/23/2021 07:23:33 ES30CLIENT21  [EventHelperServiceImpl] INFO: Sending event notification [STARTED JOB] for tenant [ES30CLIENT21] with variables"
        ],
        [STARTED JOB],
        [
            "[dataLoaderJobTaskExecutor-8] - 02/23/2021 07:40:49 ES30CLIENT21  [EventHelperServiceImpl] INFO: Sending event notification [STARTED JOB] for tenant [ES30CLIENT21] with variables"
        ],
        [
            "[dataLoaderJobTaskExecutor-1] - 02/23/2021 07:41:21 ES30CLIENT21  [EventHelperServiceImpl] INFO: Sending event notification [STARTED JOB] for tenant [ES30CLIENT21] with variables "
        ]
    ]

下面是我的代码,但它没有给我预期的输出:

- set_fact: my_list="{{ item.replace(item, 'STARTED JOB') if item|length == 0 else item }}"
  with_items: "{{ inf_list_tmp }}"

有没有办法在 Ansible 剧本中实现这一目标?提前致谢!

【问题讨论】:

    标签: ansible ansible-facts


    【解决方案1】:

    让我们简化数据,例如

    inf_list_tmp: [[], [], [a], [], [b], [], [c], [d]]
    

    问:将上面列表中的空索引替换为字符串'STARTED JOB'

    A:下面的任务

        - set_fact:
            inf_list: "{{ inf_list|default([]) + [_item] }}"
          loop: "{{ inf_list_tmp }}"
          vars:
            _item: "{{ (item|length > 0)|ternary(item,  'STARTED JOB') }}"
    

    给予

      inf_list:
      - STARTED JOB
      - STARTED JOB
      - - a
      - STARTED JOB
      - - b
      - STARTED JOB
      - - c
      - - d
    

    【讨论】:

      猜你喜欢
      • 2016-04-29
      • 2020-01-28
      • 1970-01-01
      • 2018-11-05
      • 2012-08-31
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多