Я работаю над книгой, которая выполняет следующие действия:
- Идет по указанному пути на каждом сервере Windows
- Отбирает текст из файла и добавляет его в переменную
- Выполняет проверку переменной, чтобы увидеть, существует ли строка текста
- Записывает результаты в файл на основе результата.
Вот кодУ меня есть для этого:
---
- name: Slurps text from file on Windows server
hosts: win
gather_facts: false
tasks:
- name: Get text
slurp:
src: D:\testsearch.ini
register: norequest
- name: Check for norequest=false in variable
lineinfile:
dest: ./norequest.csv
line: "{{ inventory_hostname }} There is a false value"
state: present
create: true
insertafter: EOF
when: '"''NoRequest = False'' in norequest.content|b64decode"|lower'
delegate_to: localhost
- name: Check for norequest=true in variable
lineinfile:
dest: ./norequest.csv
line: "{{ inventory_hostname }} There is a true value."
state: present
create: true
insertafter: EOF
when: '"''NoRequest = True'' in norequest.content|b64decode"|lower'
delegate_to: localhost
Исходя из моих результатов, похоже, что книга воспроизведения отбирает текст из файлов на обоих тестовых серверах и добавляет все это в переменную, а затем выполняет условную проверку на одном изсерверы (поскольку сама задача делегируется локальному хосту) и выводит результаты в файл, как если бы они все были получены от SERVER1 (последняя часть, похоже, связана с делегированием).
PLAY [Slurps text from file on Windows server] *******************************
TASK [Delete previous norequest file] *******************************
changed: [SERVER1 -> localhost]
TASK [Get text] ***************************************
ok: [SERVER2]
ok: [SERVER1]
TASK [Check for norequest=false in variable] ********************************
changed: [SERVER1 -> localhost]
TASK [Check for norequest=true in variable] *******************************
changed: [SERVER1 -> localhost]
PLAY RECAP *******************************
SERVER1 : ok=4 changed=3 unreachable=0 failed=0
SERVER2 : ok=1 changed=0 unreachable=0 failed=0
Здесьсодержимое файла после запуска playbook:
SERVER1 There is a false value
SERVER1 There is a true value.
Вот какой должен быть результат, если playbook работал так, как я хочу:
SERVER1 There is a false value
SERVER2 There is a true value.
Я чувствую, чточасть (или все)моя проблема может быть в том, что я смотрю на это через объектив PowerShell;как в «ДЛЯ КАЖДОГО сервера, получите текст из файла, выполните условную проверку, запишите выходные данные в выходной файл, а затем перейдите к следующему серверу».Возможно ли что-то подобное в пьесе Ansible?Я искал словари как способ решения этой проблемы, но единственные хорошие примеры, которые я мог найти, использовали уже существующие словари или словари, заполненные во время выполнения базовой информацией о сервере.