Lamobot
*set_fact в pre_tasks
Max
я к этому и склонялся. но думал, может есть более лаконичное решение.
спасибо
Grek 🇺🇦
более лаконично решение сделать PR в репу
Grek 🇺🇦
вы и себе сделаете хорошо, и всем остальным, кто может столкнуться с таким
Max
Хорошая идея, да. Надо будет как-то подготовить это.
Alexander
Коллеги, привет вам. Смотрите, у меня тут в парке объявилась ОС - RED OS, которая ребрендинговая CentOS.
В одной роли я делаю include_tasks: "{{ ansible_facts.os_family | lower}}.yml"
Так вот у этой RED OS os_family разрешается как 'red' вместо 'redhat'. =) Как можно выкрутиться, не используя when?
Valiy
симлинк))
Sergey
^^^ +++
Alexander
Ну да ) это был вторй вариант
Alexander
А это норм практика?
Sergey
Пожалуй, ничуть не хуже, чем работать с RED OS.
Dmitriy
А это норм практика?
коллега по несчастью, я обходил вот так when: (ansible_os_family == "RedHat" or ansible_os_family == "RED")
Dmitriy
и все заработало нормально
Sergey
Alexander
Valiy
ну или скопирую просто файл центоса в red.yml
Sebor▂▅▇█▓▒░
Alexander
Ну, с симлинком норм. ) Спасибо.
Ruslan
Всем привет. Подскажите пожалуйста почему так происходит?
- name: Include secret vars file
include_vars:
dir: vars
name: secret.yml
- name: Create hive user
become: yes
become_method: su
become_user: postgres
postgresql_user:
name: hive
password: "{{ hivedb_password }}"
msg: |-
The task includes an option with an undefined variable. The error was: 'hivedb_password' is undefined
файл и переменная в нем конечно же есть
Sergey
Ruslan
хм.. ok, но чет у меня без include_vars тоже самое
Ruslan
если именно в отдельном новом файле
в vars/main.yml - видим переменную
Ruslan
а как-то можно сделать чтобы читал из отдельного файла для роли?
Ruslan
ansible_included_var_files: []
message: |-
Could not find file on the Ansible Controller.
Sergey
Ruslan
🤔 да просто мне так кажется удобнее работать с секретными переменными, проще зашифровать волтом отдельный файл с паролями и не смешивать их с несекретными
Sergey
Sergey
Ruslan
Спасибо
Sergey
Ну или в случае лютой лени:
role/vars/main/anyfilename.yml
Ruslan
Ruslan
хорошо бы бота прикрутить к группе и карму накидывать за помощь
Alexander
Ruslan
Не понимаю в чем дело.🤔
я просто хочу вычленить bool из query_result и поменять на противоположное значение
- name: Check db host status
become: yes
become_method: su
become_user: postgres
postgresql_query:
db: postgres
query: select pg_is_in_recovery()
register: pg_is_in_recovery
debugger: always
- name: debug
debug:
msg: "{{ not pg_is_in_recovery.query_result | last | bool }}"
debugger: always
ok: [hadoop1] =>
msg: true
[hadoop1] TASK: hive2 : debug (debug)> p task_vars['pg_is_in_recovery']
{u'changed': False,
'failed': False,
u'query': u'select pg_is_in_recovery()',
u'query_result': [{u'pg_is_in_recovery': False}],
u'rowcount': 1,
u'statusmessage': u'SELECT 1'}
[hadoop1] TASK: hive2 : debug (debug)> c
ok: [hadoop2] =>
msg: true
[hadoop2] TASK: hive2 : debug (debug)> p task_vars['pg_is_in_recovery']
{u'changed': False,
'failed': False,
u'query': u'select pg_is_in_recovery()',
u'query_result': [{u'pg_is_in_recovery': True}],
u'rowcount': 1,
u'statusmessage': u'SELECT 1'}
[hadoop2] TASK: hive2 : debug (debug)> c
дебаг в msq на оба хоста показывает true хотя в query_result они разные 😰
Grek 🇺🇦
потому что ты не "вычленяешь", а пропускаешь через фильтр
Grek 🇺🇦
и вроде как все правильно тебе возвращает
Sergey
Sergey
Не понимаю в чем дело.🤔
я просто хочу вычленить bool из query_result и поменять на противоположное значение
- name: Check db host status
become: yes
become_method: su
become_user: postgres
postgresql_query:
db: postgres
query: select pg_is_in_recovery()
register: pg_is_in_recovery
debugger: always
- name: debug
debug:
msg: "{{ not pg_is_in_recovery.query_result | last | bool }}"
debugger: always
ok: [hadoop1] =>
msg: true
[hadoop1] TASK: hive2 : debug (debug)> p task_vars['pg_is_in_recovery']
{u'changed': False,
'failed': False,
u'query': u'select pg_is_in_recovery()',
u'query_result': [{u'pg_is_in_recovery': False}],
u'rowcount': 1,
u'statusmessage': u'SELECT 1'}
[hadoop1] TASK: hive2 : debug (debug)> c
ok: [hadoop2] =>
msg: true
[hadoop2] TASK: hive2 : debug (debug)> p task_vars['pg_is_in_recovery']
{u'changed': False,
'failed': False,
u'query': u'select pg_is_in_recovery()',
u'query_result': [{u'pg_is_in_recovery': True}],
u'rowcount': 1,
u'statusmessage': u'SELECT 1'}
[hadoop2] TASK: hive2 : debug (debug)> c
дебаг в msq на оба хоста показывает true хотя в query_result они разные 😰
Как на оба? У тебя же тут разные значения, а "last" - это последний элемент списка.
Ruslan
а точно
Ruslan
выходит все проще
not pg_is_in_recovery.query_result.0.pg_is_in_recovery | bool
Игорь
Подскажите, что такое group в ec2 модуле? Security group? Placement group? Autoscaling group?
Alexander
Alexander
Игорь
спасибо
Игорь
а amazon.aws.ec2 это то же самое, что ec2?
Alex
Игорь
напомните, если playbook выполняет задачи сперва на localhost, а потом на ремоут, как можно передать зарегистрированную переменную из первого этапа?
Fire
Игорь
не понимаю.
- name: "Export {{ instance.instances.0.id }}"
set_fact:
builder_ec2_id: "{{ instance.instances.0.id }}"
- hosts: just_created
remote_user: ubuntu
tasks:
- debug:
var: "{{ builder_ec2_id }}"
FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'builder_ec2_id' is undefined
Fire
Игорь
т.е. обращаться к map hostvars.host1?
Игорь
вроде заработало
Игорь
не очень ясно зачем так сделано
Игорь
память экономим? 😂
Fire
Эм, ну как бы у тебя есть hostvars[]. Там все переменные всех хостов.
Fire
Где экспорт?
Fire
Через set_facts ты создаёшь переменную, которая живёт только в этой сессии.
Fire
Если у тебя уже есть переменная, то set_fatcs не нужен.
Fire
Игорь
Игорь
хотя натурально hostvars не доступны если не было gather_facts
0xDEFACE
Подскажите пожалуйста в инвентори можно переменные для хоста на разные строки перенести?
0xDEFACE
уж больно длинная линия получается
Fire
Lamobot
0xDEFACE
Спасибо
Grek 🇺🇦
Ребят, а как правильно нагородить такую конструкцию:
- надо вычитать uuid из файла, но если файла нет - то сгенерить новый uuid чтоб потом передать его в темплейт и создать файл
делаю в дефолтах
__voodoo_machine_uuid: "{{ lookup('file', '/opt/S3Service/machine.uuid') | default (lookup('password', '/dev/null ') | to_uuid | upper, true) }}"
но если файла нет ошибка
fatal: [localhost]: FAILED! => {"msg": "An unhandled exception occurred while templating '{{ lookup('file', '/opt/S3Service/machine.uuid') | default (lookup('password', '/dev/null ') | to_uuid | upper, true) }}'. Error was a <class 'ansible.errors.AnsibleError'>, original message: An unhandled exception occurred while running the lookup plugin 'file'. Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: /opt/S3Service/machine.uuid"}