ansible playbook,带到循环的平滑迁移

ansible playbook,带到循环的平滑迁移,ansible,Ansible,我正在尝试将使用和_platted的旧剧本迁移到循环 我试着跟随,但没有做到 这是我的主机 - hosts: example.com vars: - configureddisks: - xvdb - xvdc - btrfsdisks: - xvdf - xvdg 我的原始任务及其输出如下: # Task - debug: msg: "{{ item }}" with_flattened:

我正在尝试将使用
和_platted
的旧剧本迁移到
循环

我试着跟随,但没有做到

这是我的主机

- 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"
    ]
}
我的新任务及其输出如下:

# 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"
    ]
}

如何使用循环编写新任务,使其与旧任务具有相同的输出?

您使用的是
扁平化过滤器。当你写这篇文章时:

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

- debug:
    msg: "{{ item }}"
  loop: "{{ (configureddisks + btrfsdisks) | select('defined') | list }}"
如果您真的想走“构建列表并将其展平”的路线,这可能类似于:

- debug:
    msg: "{{ item }}"
  loop: >-
    {{
    (
    (configureddisks | select('defined') | list)  +
    (btrfsdisks | select('defined') | list)
    )|flatten
    }}
请注意,为了便于阅读,我将其分散在多行中,但您也可以轻松地将其全部写在一行中:

  loop: "{{ ((configureddisks | select('defined') | list)  + (btrfsdisks | select('defined') | list))|flatten }}"

您使用的是
flant
过滤器。当你写这篇文章时:

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

- debug:
    msg: "{{ item }}"
  loop: "{{ (configureddisks + btrfsdisks) | select('defined') | list }}"
如果您真的想走“构建列表并将其展平”的路线,这可能类似于:

- debug:
    msg: "{{ item }}"
  loop: >-
    {{
    (
    (configureddisks | select('defined') | list)  +
    (btrfsdisks | select('defined') | list)
    )|flatten
    }}
请注意,为了便于阅读,我将其分散在多行中,但您也可以轻松地将其全部写在一行中:

  loop: "{{ ((configureddisks | select('defined') | list)  + (btrfsdisks | select('defined') | list))|flatten }}"