Ansible: зацикливание многострочных строк в однострочные - PullRequest
1 голос
/ 05 марта 2020

У меня есть al oop, который сейчас выдает эту ошибку:

Invalid data passed to 'loop', it requires a list, got this instead: 1, 2, 3. Hint: If you passed a list/dict of just one element, try adding wantlist=True to your lookup invocation or use q/query instead of lookup

Вот моя задача на данный момент:

- name: Delete anything that is not excluded
  win_shell: Get-ChildItem -Exclude {{ '"%02x",' | format(item) }} "test_directory", "test_file.txt" | Remove-Item -Recuse -Force
  args:
    chdir: C:\\Temp
  loop: "{{ range(1, 3 + 1) | join(', ') }}"

Я хотел бы l oop чтобы заполнить команду PowerShell следующим образом:

Get-ChildItem -Exclude "01", "02", "03", "test_directory", "test_file.txt" | Remove-Item -Recuse -Force

Я также открыт для использования других Ansible Windows модулей или любых других методов, чтобы это тоже работало.

1 Ответ

1 голос
/ 05 марта 2020

Примечание: я не играл следующие win_shell задачи, но использовал debug на своей стороне для проверки своих решений.


Вы используете l oop, когда хотите сыграть данный модуль n раз. Вы хотите отформатировать список и использовать его для создания одной команды один раз.

В этом случае l oop следует переместить к предыдущей задаче, где вы будете создавать список отформатированных элементов итеративно. Это может выглядеть следующим образом:

- name: Create a formatted list of exclusions
  set_fact:
    formatted_exclude_list: >-
      {{ formatted_exclude_list | default([]) + ['"%02x"' | format(item)] }}
  loop: "{{ range(1, 4) | list }}"

- name: Delete anything that is not excluded
  win_shell: Get-ChildItem -Exclude {{ formatted_exclude_list | join(', ') }}, "test_directory", "test_file.txt" | Remove-Item -Recuse -Force
  args:
    chdir: C:\\Temp

Хотя это менее "ansibli sh" способ, вы можете достичь той же цели в одной задаче с довольно большим количеством шаблонов

- name: Delete anything that is not excluded
  vars:
    exclude_list: "{{ range(1, 4) | list }}"
    formatted_exclude_list: >-
      {%- set my_list = [] -%}
      {%- for item in exclude_list -%}
        {{ my_list.append('"%02x"' | format(item)) }}
      {%- endfor -%}
      {{ my_list }}
  win_shell: Get-ChildItem -Exclude {{ formatted_exclude_list | join(', ') }}, "test_directory", "test_file.txt" | Remove-Item -Recuse -Force
  args:
    chdir: C:\\Temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...