Size: a a a

2021 January 29

L

Lamobot in Ansible
OpsDev
Всем привет! есть роль по настройке ОС, там есть вот такой таск
- name: Set up snapshot cron job
    cron:
       name: "Elasticsearch backup"
       minute: 59
       hour: 23
       job: "{{ es_snapshot_snapshot_script_path }}/snapshot_es.sh"
 
в инвентаре у меня 5 хостов
[elasticsearch-cluster-india]
elasticsearch-01-mumbai ansible_host=10.0.87.19
elasticsearch-02-mumbai ansible_host=10.0.87.20
elasticsearch-03-mumbai ansible_host=10.0.87.21

но так же есть и другой инвентарь c другой группой хостов
[elasticsearch-cluster-kyrgyzstan]
elasticsearch-01-bishkek ansible_host=10.0.92.2
elasticsearch-02-bishkek ansible_host=10.0.92.3
elasticsearch-03-bishkek ansible_host=10.0.92.4

вопрос, как мне сделать так что бы этот таск запускался только на первом хосте в каждой группе?
delegate_to: '{{ groups["elasticsearch-cluster-india"] | sort | first }}'
источник

L

Lamobot in Ansible
Вроде как ещё run_once: yes выполняется на первом хосте в группе, недавно был вопрос
источник

L

Lamobot in Ansible
If you want a task to run only on the first host in your batch of hosts, set run_once to true on that task:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html#running-on-a-single-machine-with-run-once
источник

AD

Alex Domoradov in Ansible
Evgeny A
Guys, I have task, it calls python script, the python script return dict() type. This dict saves in ansible variable as string.
How can I save dict from python as dict in ansible?
have you tried from_json/to_nice_json filters?
источник

EA

Evgeny A in Ansible
Alex Domoradov
have you tried from_json/to_nice_json filters?
yepp, I tried both (python returns: json.dump(data))
источник

AD

Alex Domoradov in Ansible
citius
не гарантирует же, что это _всегда_ будет именно elasticsearch-01-*
почему? там вроде есть флаг/опция которая гарантирует такой же порядок как в inventory
источник

L

Lamobot in Ansible
Evgeny A
yepp, I tried both (python returns: json.dump(data))
Can you give example of python result?
Like debug: var=python_result?
источник

AD

Alex Domoradov in Ansible
точнее вот

- hosts: all
 order: sorted
 gather_facts: False


ansible will play the hosts in the order they were mentioned in the inventory file.
источник

EA

Evgeny A in Ansible
Lamobot
Can you give example of python result?
Like debug: var=python_result?
FAILED! => {"msg": "|combine expects dictionaries, got '{\"key1\": \"val1\", \"key2\": \"val2"}\\n'"}

and from python script:
        self.result_json = json.dumps(self.result)
       print(self.result_json)
источник

L

Lamobot in Ansible
Evgeny A
FAILED! => {"msg": "|combine expects dictionaries, got '{\"key1\": \"val1\", \"key2\": \"val2"}\\n'"}

and from python script:
        self.result_json = json.dumps(self.result)
       print(self.result_json)
Before combine? Just result
источник

AD

Alex Domoradov in Ansible
Evgeny A
FAILED! => {"msg": "|combine expects dictionaries, got '{\"key1\": \"val1\", \"key2\": \"val2"}\\n'"}

and from python script:
        self.result_json = json.dumps(self.result)
       print(self.result_json)
no, could you show the var itself without any filters
источник

c

citius in Ansible
Alex Domoradov
почему? там вроде есть флаг/опция которая гарантирует такой же порядок как в inventory
Но никто же не может на 100% гарантировать порядок в инвентаре.
Опечатка, или коллега который не в курсе таких мелочей, и все сломается.
источник

EA

Evgeny A in Ansible
Alex Domoradov
no, could you show the var itself without any filters
ok: [ip.ip.ip.ip] => {
   "msg": {
       "changed": false,
       "failed": false,
       "rc": 0,
       "stderr": "",
       "stderr_lines": [],
       "stdout": "{\"key1\": \"val1\", \"key2\": \"val2"}\n",
       "stdout_lines": [
           "{"{\"key1\": \"val1\", \"key2\": \"val2"}\n"}"
       ]
   }
}
источник

AD

Alex Domoradov in Ansible
> Но никто же не может на 100% гарантировать порядок в инвентаре.

ну если вообще нет никакой гарантии ни в чем - то только страдать )))
источник

EA

Evgeny A in Ansible
Lamobot
Before combine? Just result
Look above please
источник

E

Elenhil in Ansible
Evgeny A
Коллеги, подскажите, у меня есть таска вызывающая питонячий скрипт, этот скрипт возвращает дискшенари (так же пробовал json), этот результат сохраняется в переменной в ansible, но эта переменная в ансибл, просто текст. Отчего, при дальнейшем слиянии словарей, получаю логичное:
"|combine expects dictionaries, got

Подскажите пожалуйста, как преобразовать строку в словарь, или указать ансиблу где-то, что бы сохранял дикшенари как дикшенари, а не как строку?
To_json
источник

🅐

🅐🅝🅐🅣🅞🅛🅘🅨... in Ansible
подскажите как запуткать таску только после успешного завершения предидущей таски?
источник

AD

Alex Domoradov in Ansible
🅐🅝🅐🅣🅞🅛🅘🅨
подскажите как запуткать таску только после успешного завершения предидущей таски?
зависит от модулей. которые используются в этих тасках
источник

🅐

🅐🅝🅐🅣🅞🅛🅘🅨... in Ansible
Alex Domoradov
зависит от модулей. которые используются в этих тасках
модуль file
источник

AD

Alex Domoradov in Ansible
но по дефолту, как правило, playbook остановится, если будет ошибка
источник