#mongodb #ansible #yaml #ansible-facts
#mongodb #ansible #yaml #ansible-факты
Вопрос:
Ниже приведен сценарий
---
- name: stop agent process
shell: "ps -ef | grep -v grep | grep -w {{ MONGODB_AGENT_PROCESS }} | awk '{print $2}'"
register: running_agent_processes
- name: stop mongod process
shell: "ps -ef | grep -v grep | grep -w {{ MONGODB_SERVER_PROCESS }} | awk '{print $2}'"
register: running_mongod_processes
- name: combine processes
set_fact:
all_processes: "{{ running_agent_processes.stdout_lines running_mongod_processes.stdout_lines }}"
- name: Kill all processes
shell: "kill {{ item }}"
with_items: "{{ all_processes }}"
when: ansible_facts[ansible_hostname] != primary
- wait_for:
path: "/proc/{{ item }}/status"
state: absent
with_items: "{{ all_processes }}"
ignore_errors: yes
register: killed_processes
when: ansible_facts[ansible_hostname] != primary
- name: Force kill stuck processes
shell: "kill -9 {{ item }}"
with_items: "{{ killed_processes.results | select('failed') | map(attribute='item') | list }}"
when: ansible_facts[ansible_hostname] != primary
Я сохранил факт с именем «primary», в котором хранится первичная копия реплики mongodb, установленная на предыдущем шаге в сборнике воспроизведения.
Я просто хочу сравнить ansible_facts[ansible_hostname]
с моим primary
фактом. Если они не равны, я хотел бы уничтожить процессы.
Ошибка, которую я получаю, приведена ниже:
фатальный: [lpdkubpoc01d.phx.aexp.com ]: НЕ УДАЛОСЬ! => {«сообщение»: «Не удалось выполнить условную проверку ‘ansible_facts[ansible_hostname] != primary’. Ошибка заключалась в следующем: ошибка при вычислении условного (ansible_facts[ansible_hostname] != primary): ‘ansible_facts’ не определен n n Ошибка, по-видимому, была в ‘/idn/home/sanupin/stop-enterprise-mongodb/tasks/ stopAutomationAgent.yml’: строка 11, столбец 3,но может быть в другом месте файла в зависимости от конкретной синтаксической проблемы.nn Строка-нарушитель выглядит следующим образом:nn
all_processes: «{{ запуск_агент_процессов.stdout_lines запуск_монгод_процессов.stdout_lines }}»n- name: уничтожить все процессы n ^ здесь n»}фатальный: [lpdkubpoc01c.phx.aexp.com ]: НЕ УДАЛОСЬ! => {«сообщение»: «Не удалось выполнить условную проверку ‘ansible_facts[ansible_hostname] != primary’. Ошибка заключалась в следующем: ошибка при вычислении условного (ansible_facts[ansible_hostname] != primary): ‘ansible_facts’ не определен n n Ошибка, по-видимому, была в ‘/idn/home/sanupin/stop-enterprise-mongodb/tasks/ stopAutomationAgent.yml’: строка 11, столбец 3,но может быть в другом месте файла в зависимости от конкретной синтаксической проблемы.n n Строка-нарушитель выглядит так:nn
all_processes: «{{ запуск_агент_процессов.stdout_lines запуск_mongod_processes.stdout_lines }}»n- name: уничтожить все процессы n ^ здесь n»} фатальный: [lpdkubpoc01e.phx.aexp.com ]: НЕ УДАЛОСЬ! => {«сообщение»: «Не удалось выполнить условную проверку ‘ansible_facts[ansible_hostname] != primary’. Ошибка заключалась в следующем: ошибка при вычислении условного (ansible_facts[ansible_hostname] != primary): ‘ansible_facts’ не определен n n Ошибка, по-видимому, была в ‘/idn/home/sanupin/stop-enterprise-mongodb/tasks/ stopAutomationAgent.yml’: строка 11, столбец 3,но может быть в другом месте файла в зависимости от конкретной синтаксической проблемы.nn Строка-нарушитель выглядит следующим образом:nn
all_processes: «{{ запуск_агент_процессов.stdout_lines запуск_монгод_процессов.stdout_lines }}»n- name: уничтожить все процессы n ^ здесь n»}
Может ли кто-нибудь помочь мне в сравнении ansible_fact с фактом set_fact?
Ответ №1:
Вы можете сравнивать использование непосредственно ansible facts без предварительной записи ansible_facts
. Просто используйте как when: ansible_hostname != primary