Рейтинг:0

Ansible выбирает пустые элементы из списка

флаг cn
raw

Мне нужна переменная со всеми пустыми элементами, присутствующими в _названия список. Я пробовал это:

пробелы: "{{ _names|выбрать('поиск', '') | список }}"

Но это не работает

вот список:

    "_имена":
    [
        "",
        "Азбука",
        "",
        ""
    ]

Чтобы дать некоторый контекст, мне нужна эта переменная для подсчета пустых элементов и их сравнения.

Рейтинг:0
флаг fr

Простой интуитивный способ состоит в том, чтобы Выбрать элементы равны пустой строке. Другой немного не интуитивно понятный, но более компактный для написания, это просто отклонять элементы (которые по умолчанию будут отклонять все непустые значения). В следующем плейбуке демонстрируются оба решения, которые дают одинаковый результат.

Обратите внимание отклонять метод здесь будет работать только до тех пор, пока другие непустые элементы в списке не будут оценены как ложные. Если вы когда-нибудь ложно выберете логические значения, они также будут сохранены.

- хосты: локальный
  сбор_фактов: ложь

  вары:
      _names: ["","ABC","",""]
      Blanks_select: "{{ _names | select('==', '') | list }}"
      Blanks_reject: "{{ _names | reject | list }}"

  задачи:
    - отладка:
        переменная: "{{ элемент }}"
      петля:
        - пробелы_выбрать
        - пробелы_отклонить

Который дает:

ИГРАТЬ [localhost] **************************************************** *************************

ЗАДАЧА [отладка] **************************************************** *************************
хорошо: [localhost] => (item=blanks_select) => {
    "ansible_loop_var": "элемент",
    "blanks_select": [
        "",
        "",
        ""
    ],
    "предмет": "blanks_select"
}
хорошо: [localhost] => (item=blanks_reject) => {
    "ansible_loop_var": "элемент",
    "blanks_reject": [
        "",
        "",
        ""
    ],
    "предмет": "blanks_reject"
}

ОБЗОР ИГРЫ ******************************************************* *********************
localhost: ok=1 изменено=0 недостижимо=0 не удалось=0 пропущено=0 спасено=0 проигнорировано=0
флаг br
Вариант *reject* работает, если в списке нет элемента, который оценивается как *False*. Вы можете сначала преобразовать элементы в строки, если хотите, например. ``blanks: "{{ _names|map('string')|reject|length }}"``.
Zeitounator avatar
флаг fr
@VladimirBotka абсолютно прав, поэтому я дал два подхода на случай, если текущий пример ввода будет развиваться. Однако я добавил эту точность в ответ. Спасибо.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.