Как я могу перебирать каждую строку внутри файла с возможностью?

Я ищу что-то, что было бы похоже на with_items:, но это получило бы список элементов из файла вместо того, чтобы включать его в файл playbook.

Как я могу сделать это в недоступном?

Ответ 1

Мне удалось найти легкую альтернативу:

- debug: msg="{{item}}"
  with_lines: cat files/branches.txt

Ответ 2

Допустим, у вас есть файл типа

item 1
item 2
item 3

И вы хотите установить эти элементы. Просто загрузите содержимое файла в переменную с помощью register.And используйте эту переменную для with_items. Убедитесь, что ваш файл имеет по одному элементу в строке.

---
- hosts: your-host
  remote_user: your-remote_user
  tasks:
  - name: get the file contents
    command: cat /path/to/your/file
    register: my_items
  - name: install these items
    pip: name:{{item}}
    with_items: my_items.stdout_lines

Ответ 3

Я удивлен, что никто не упомянул об поисках, думаю, это именно то, что вы хотите.

Он считывает содержимое, которое вы хотите использовать в своей книге игр, но не хотите включать в книгу игр из файлов, канала, csv, redis и т.д. с вашего локального управляющего компьютера(не с удаленного компьютера, это важно, поскольку в большинстве случаев это содержимое находится рядом с вашей книгой воспроизведения на локальном компьютере), и оно работает с ANSIBLE LOOP.

---
- hosts: localhost
  gather_facts: no
  tasks:
    - name: Loop over lines in a file
      debug:
        var: item
      with_lines: cat "./files/lines"

with_lines здесь на самом деле цикл с поиском строк, чтобы увидеть, как работает поиск lines, посмотрите код здесь, он просто запускает любые команды, которые вы ему даете (так что вы можете дать ему любой например, echo, cat и т.д.), затем разделите выходные данные на строки и верните их.

Есть много мощных поисков, чтобы получить полный список, проверьте папку плагинов поиска.

Ответ 4

Последний Ansible рекомендует loop вместо with_something. Его можно использовать в сочетании с lookup и splitlines(), как Икар Похорски указал:

- debug: msg="{{item}}"
  loop: "{{ lookup('file', 'files/branches.txt').splitlines() }}"

files/branches.txt должен быть относительно пьесы