Ansible: как отфильтровать строки, хранящиеся в переменной, по ключевым словам - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь найти неиспользуемые диски, используя ansible. До сих пор я могу сохранять неиспользуемые пути к дискам в переменной. Но я получаю много другой бесполезной информации, такой как знаки плюс и скобки. Мне было интересно, как я могу отфильтровать список и получить строки, которые включают / dev. Вот код, который у меня есть:

- set_fact:
    list_of_disks: []

- name: getting list of disks
  set_fact:
    list_of_disks: "[{{list_of_disks}} + '/dev/{{item.key}}']"
  when:
    - not item.value.partitions
    - not item.value.holders
    - not item.value.links.ids
    - item.key | search ("sd")
  with_dict: "{{ ansible_devices }}"

- name: display unused disks
  debug:
    var: list_of_disks.split("'")

И это вывод, который я получаю

    "list_of_disks.split(\"'\")": [
    "[[[] + ",
    "/dev/sde",
    "] + ",
    "/dev/sdc",
    "]"
]

}

Я бы хотел, чтобы результат выглядел как "/ DEV / СДУ", "/ DEV / SDC",

Примечание: имена дисков будут меняться с одного сервера на другой. Так что я не хочу искать только sde и sdc. Он должен иметь возможность архивировать все диски, которые появляются в списке.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Если вам нужны все в одной строке, создайте переменную и добавьте к ней:

  - set_fact:
      list_of_disks=""

  - set_fact: 
      list_of_disks: "{{ list_of_disks | regex_replace('^, ','') }}, {{ item.device }}"
    with_items: "{{ ansible_facts.mounts }}"
    when: "'/dev/' in item.device"

  - debug:
      msg: "{{ list_of_disks }}"

За это я получил:

TASK [debug] **********************************************************************************************************************************
ok: [localhost] => {
    "msg": "/dev/mapper/fedora-root, /dev/nvme0n1p1, /dev/mapper/fedora-home"
}
0 голосов
/ 26 октября 2018

Ну, может быть не тот формат, который вы хотите, но:

  - debug:
      msg: "{{ item.device }}"
    with_items: "{{ ansible_facts.mounts }}"
    when: "'/dev/' in item.device" 

Должен сделать свое дело.

На моем местном я получил:

TASK [debug] **********************************************************************************************************************************
ok: [localhost] => (item=None) => {
    "msg": "/dev/mapper/fedora-root"
}
ok: [localhost] => (item=None) => {
    "msg": "/dev/nvme0n1p1"
}
ok: [localhost] => (item=None) => {
    "msg": "/dev/mapper/fedora-home"
}
...