ansible-playbook with_flattened migration to loop

问题描述 投票:0回答:1

我正在尝试将使用with_flattened的旧剧本迁移到loop

我试图跟随ansible user guide,但未能这样做。

这是我的host_var:

- hosts: example.com
  vars:
    - configureddisks:
        - xvdb
        - xvdc
    - btrfsdisks:
        - xvdf
        - xvdg

我的原始任务及其输出如下:

# Task
- debug:
    msg: "{{ item }}"
    with_flattened:
      - "{{ configureddisks | select('defined') | list }}"
      - "{{ btrfsdisks | select('defined') | list }}"


# ansible-playbook output
TASK [devices : debug] **********************************************************************************************************************************************************************************************************************
ok: [example.com] => (item=xvdb) => {
    "msg": "xvdb"
}
ok: [example.com] => (item=xvdc) => {
    "msg": "xvdc"
}
ok: [example.com] => (item=xvdf) => {
    "msg": "xvdf"
}
ok: [example.com] => (item=xvdg) => {
    "msg": "xvdg"
}

我的新任务及其输出如下:

# Task
- debug:
    msg: "{{ item }}"
    loop:
      - "{{ configureddisks | select('defined') | list | flatten }}"
      - "{{ btrfsdisks | select('defined') | list | flatten }}"


# ansible-playbook output
ok: [example.com] => (item=[u'xvdb', u'xvdc']) => {
    "msg": [
        "xvdb",
        "xvdc"
    ]
}
ok: [example.com] => (item=[u'xvdf', u'xvdg']) => {
    "msg": [
        "xvdf",
        "xvdg"
    ]
}

我应该如何使用循环编写新任务,以便它具有与旧任务相同的输出?

ansible
1个回答
1
投票

你在滥用qazxsw poi过滤器。当你写这个:

flatten

loop: - "{{ configureddisks | select('defined') | list | flatten }}" - "{{ btrfsdisks | select('defined') | list | flatten }}" 过滤器没有效果:您提供已经展平的列表作为输入(两次)。您需要将过滤器应用于生成的列表,但不是这样做,您可以重写表达式,以便不需要展平:

flatten

如果你真的想要“建立一个列表并展平它”的路线,那可能看起来像:

- debug:
    msg: "{{ item }}"
  loop: "{{ (configureddisks + btrfsdisks) | select('defined') | list }}"

请注意,为了便于阅读,我将其分布在多行中,但您可以轻松地将其全部写在一行:

- debug:
    msg: "{{ item }}"
  loop: >-
    {{
    (
    (configureddisks | select('defined') | list)  +
    (btrfsdisks | select('defined') | list)
    )|flatten
    }}
© www.soinside.com 2019 - 2024. All rights reserved.