Grek 🇺🇦
или надо все таки делать отдельные таски на проверку существования файла?
Fire
Ребят, а как правильно нагородить такую конструкцию:
- надо вычитать 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"}
Может проще всегда сразу в шаблон отдавать?
Grek 🇺🇦
можешь развернуть мысль?
Elenhil
Ребят, а как правильно нагородить такую конструкцию:
- надо вычитать 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"}
м?
Elenhil
- name: if this file does not exist, I do not care .. file plugin itself warns anyway ...
debug: msg="{{ lookup('file', '/nosuchfile', errors='ignore') }}"
Fire
А не искать uuid в файле на хосте.
Grek 🇺🇦
Andrey
Народ подскажите синтаксис значений переменной в ролях. Есть плейбук по созданию пользователей, с переменной users:
- test1
- test2
- test3 Плейбук выполняется. При запуске роли ругается на эти переменные.
Отделение Bereke Bank
октябрьский #LDAP
Sergey
Уже, кстати, №2.
tutunak
А что останавливает людей от использования freeipa или хотябы openldap?
Grek 🇺🇦
надо бота научить тригериться на ключевые слова и сразу отправлять куда нужно
встретил user|users -и спросил - а не LDAP ли тебе нужен?
tutunak
Отделение Bereke Bank
Отделение Bereke Bank
Ну вообще если пользователей у тебя полторы калеки - лдап излишен
Tamerlan
Дмитрий
Доброго дня! Подскажите как я могу получить mac-адрес "vm2" в данном листе:
dhcp_hosts:
- name: "vm1"
mac: "52:54:20:BB:93:A0"
ip: "172.16.54.11"
- name: "vm2"
mac: "52:54:20:BB:93:A1"
ip: "172.16.54.12"
Demidenko A.S.
Господа, добрый вечер!
Подскажите пожалуйста, дураку, никак не могу вникнуть в простейшую вещь.
Проблема в структуре environment.
Вот есть у него окружение, допустим dev-ha.
В нем есть group_vars (в нем all для всех, и ямлы по группам), есть host_vars (в нем ямлы по хостам), тут всё понятно, всё работает.
Пытаюсь сделать идентичное, но по плейбукам, а именно play_vars. Где-то читал и видел, что там можно по аналогии с хостами переменные задавать, но ансибл в упор не хочет понимать и видеть любую из придуманных вариаций закидывания в play_vars переменных. А раз ансибл не понимает, значит я не умею объяснять.
Кто-нибудь работал с такой штукой как play_vars? Как правильно организовать в ней всё?
Спасибо!
Отделение Bereke Bank
а зачем? как показывает моя практика - использовать варсы где либо кроме инвентори и в редких случаях extra-vars - выстрел в ногу коллегой
Sergey
Demidenko A.S.
дело в том, что очень сильно загруженный переменными плейбук получился, пытаюсь понять, можно ли его каким-нибудь правильным способом разгрузить, убрав 15 строчек переменных для читаемости
Sergey
Господа, добрый вечер!
Подскажите пожалуйста, дураку, никак не могу вникнуть в простейшую вещь.
Проблема в структуре environment.
Вот есть у него окружение, допустим dev-ha.
В нем есть group_vars (в нем all для всех, и ямлы по группам), есть host_vars (в нем ямлы по хостам), тут всё понятно, всё работает.
Пытаюсь сделать идентичное, но по плейбукам, а именно play_vars. Где-то читал и видел, что там можно по аналогии с хостами переменные задавать, но ансибл в упор не хочет понимать и видеть любую из придуманных вариаций закидывания в play_vars переменных. А раз ансибл не понимает, значит я не умею объяснять.
Кто-нибудь работал с такой штукой как play_vars? Как правильно организовать в ней всё?
Спасибо!
play_vars - это не то, что ты думаешь. Это переменные, которые непосредственно задаются в плее.
Sergey
То бишь:
- hosts: blahblahblah
roles: [ '1', '2', '3' ]
vars: #play_vars
first_var:
Sergey
Demidenko A.S.
Demidenko A.S.
Там получается плейбук-агрегатор, он запускает несколько ролей давая нужные переменные им.
Хотя на самом деле, может стоит не так сильно атомизировать всё в проекте...
Спасибо!
Дмитрий
Elenhil
господа, кто-нибудь пользует mitogen? пытаюсь подружить ansible+packer, для ускорения поставил mitogen, первый же gathering facts падает с
azure-arm: [mux 15609] 15:03:02.343645 D mitogen: MitogenProtocol(unix_client.15643): disconnecting
azure-arm: fatal: [default]: UNREACHABLE! => changed=false
azure-arm: msg: |-
azure-arm: EOF on stream; last 100 lines received:
azure-arm: MITO000
azure-arm: unreachable: true
Elenhil
но по-идее MITO000 - код что всё ОК
Grek 🇺🇦
а достаточно ли сделать в sudoers
user ALL=(ALL) NOPASSWD:/usr/bin/python3
чтоб от user запускать ансибл с become: yes и не указывать пароль?
Grek 🇺🇦
естественно что в конфиге ансибла интерпретатор INTERPRETER_PYTHON = /usr/bin/python3
Grek 🇺🇦
или все таки ALL=(ALL) NOPASSWD:ALL
Grek 🇺🇦
та вот второй то понятно что работает, но чет думал что и так можно
хотя кто мне мешает из скрипта на питоне вызывать все что угодно?)
склоняюсь к тому что NOPASSWD: ALL это приемлемо
Max
Sergey
Grek 🇺🇦
Max
не хочется передавать параметрами запуска
можно скормить это в шифрованном виде, чтобы в истории баша (или иного интерпретатора не хранилось).
правда пароль vault'а потребуется. или интерактивно ввести или в файле тоже хранить
Grek 🇺🇦
подумаю над этим, можно ж и спрашивать у самого юзера, чет забыл про это
inqfen
Хотя да, скрипты могут быть разные
Grek 🇺🇦
а с чего вы решили что переменная будет так работать?
по-моему надо указать в плейбуке
gather_facts="{{ facts }}"
и запускать с экстра-варсами --extra-vars "facts=false"
inqfen
inqfen
Ну или как выше сказано да, но это странно когда для хостгруппы их собирать то надо, то не надо
inqfen
Еще вот
https://docs.ansible.com/ansible/latest/reference_appendices/config.html#envvar-ANSIBLE_GATHERING
inqfen
Дефолтное поведение можно в env или в ansible.cfg отправить
Anonymous
обьявил в плейбуке - работает, спасибо. До этого прописывал и в vars роли, и в инвентори - все равно собирал
Sergey
Добрый вечер. Подскажите как выполнить template если одна или другая вложенная переменная существует?
when: firewall.open_ports is defined or firewall.access_ports is defined
так не работает
inqfen
По идее должно, может она есть, но пустая?
inqfen
Но вообще if defined - зло
Sergey
Sergey
Императивщина.
Sergey
Пойду руки мыть.
Sergey
inqfen
А как ты в листе хотел firewall.open_ports найти?
Sergey
^^^ +++
Sergey
Sergey
да, извиняюсь, немного yaml с переменными неправильно сделал
Игорь
Скажите, мне казалось что в шаблонах можно использовать jq filter?
vars:
foo: [{"i": 1}, {"i": 2}, {"i": 3}]
tasks:
- name: debug
debug: var="{{ foo|.[].i }}"
fatal: [localhost]: FAILED! => {"msg": "template error while templating string: expected token 'name', got '.'. String: {{ foo|.[].i }}"}
Отделение Bereke Bank
Игорь
json_query
foo|json_query('$.[*].i')
работает на https://jsonpath.com/ , в ансибл {"msg": "JMESPathError in json_query filter plugin:\nBad jmespath expression: Unknown token $:\n$.[*].i\n^"}
Игорь
что я делаю неправильно?
Alexander
А что нужно получить? Все i?
Игорь
Alexander
Может json_query('[*].id')?
Игорь
json_query('[*].i')
ok: [localhost] => {
"<class 'list'>": "VARIABLE IS NOT DEFINED!"
}
Игорь
какой-то из этих вариантов подходит?
Игорь
я попробовал методом тыка, но в плейбуке не срабатывает ни один вариант запроса :(
Андрей
Alexander
Alexander
ok: [pc] => {
"msg": [
"1",
"2",
"3"
]
}