Grek 🇺🇦
или надо все таки делать отдельные таски на проверку существования файла?
Grek 🇺🇦
можешь развернуть мысль?
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
можешь развернуть мысль?
Взять значение для шаблона из конфигурации.
Fire
А не искать uuid в файле на хосте.
Andrey
Народ подскажите синтаксис значений переменной в ролях. Есть плейбук по созданию пользователей, с переменной users: - test1 - test2 - test3 Плейбук выполняется. При запуске роли ругается на эти переменные.
Отделение Bereke Bank
октябрьский #LDAP
Sergey
Уже, кстати, №2.
tutunak
А что останавливает людей от использования freeipa или хотябы openldap?
Grek 🇺🇦
надо бота научить тригериться на ключевые слова и сразу отправлять куда нужно встретил user|users -и спросил - а не LDAP ли тебе нужен?
Sergey
А что останавливает людей от использования freeipa или хотябы openldap?
1. Кривые процессы 2. "Мнененуженлдапмненужнопользователейсоздатьнахостах!"
Отделение Bereke Bank
Ну вообще если пользователей у тебя полторы калеки - лдап излишен
tutunak
Ну вообще если пользователей у тебя полторы калеки - лдап излишен
Freeipa не такая уж сложная, тем более у тебя для апликух кастомные пользователи а через нее удобно sudoers рулить
tutunak
фриипа и плейбук в 30 строк всё таки отличаются по сложности
До поры до времени, а потом не понятно кто имеет доступ к серверу, чьи ключи там лежат и т.д
Дмитрий
Доброго дня! Подскажите как я могу получить 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 - выстрел в ногу коллегой
Demidenko A.S.
дело в том, что очень сильно загруженный переменными плейбук получился, пытаюсь понять, можно ли его каким-нибудь правильным способом разгрузить, убрав 15 строчек переменных для читаемости
Дмитрий
dhcp_hosts[1]['mac'] :-) список же
да я с вложеными не работал еще, спасибо щас проверю
Sergey
То бишь: - hosts: blahblahblah roles: [ '1', '2', '3' ] vars: #play_vars first_var:
Demidenko A.S.
То бишь: - hosts: blahblahblah roles: [ '1', '2', '3' ] vars: #play_vars first_var:
Видимо по этому не могу найти информацию по такой организации environment. Вот да, примерно таким образом и организован плейбук. Хорошо, еще пути продумаю, спасибо!
Sergey
Demidenko A.S.
Demidenko A.S.
Там получается плейбук-агрегатор, он запускает несколько ролей давая нужные переменные им. Хотя на самом деле, может стоит не так сильно атомизировать всё в проекте... Спасибо!
Дмитрий
dhcp_hosts[1]['mac'] :-) список же
спасибо то что надо
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
Станислав
или все таки ALL=(ALL) NOPASSWD:ALL
первый вариант не проверял, но я такой делаю %wheel ALL=(ALL) NOPASSWD: ALL
Grek 🇺🇦
та вот второй то понятно что работает, но чет думал что и так можно хотя кто мне мешает из скрипта на питоне вызывать все что угодно?) склоняюсь к тому что NOPASSWD: ALL это приемлемо
Grek 🇺🇦
не секьюрно жеж. а почему не дать пароль от судо?
не хочется передавать параметрами запуска
Max
не хочется передавать параметрами запуска
можно скормить это в шифрованном виде, чтобы в истории баша (или иного интерпретатора не хранилось). правда пароль vault'а потребуется. или интерактивно ввести или в файле тоже хранить
Grek 🇺🇦
подумаю над этим, можно ж и спрашивать у самого юзера, чет забыл про это
inqfen
После python3 нужно *, ибо аргументы.
Ну если он из скрипта будет все вызывать, то не факт
inqfen
Хотя да, скрипты могут быть разные
Max
подумаю над этим, можно ж и спрашивать у самого юзера, чет забыл про это
типа такого: https://stackoverflow.com/questions/37297249/how-to-store-ansible-become-pass-in-a-vault-and-how-to-use-it
Anonymous
Указываю gather_facts=no везде где можно, и ансибл все равно их собирает. В чем причина ? user@localh0st ~/ > ansible-playbook -i inv play.yml --extra-vars "gather_facts=no" [WARNING]: Found variable using reserved name: gather_facts PLAY [all] ******************************************************************************************************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************************************************************** fatal: [localhost]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host localhost port 22: Connection refused", "unreachable": true} PLAY RECAP ******************************************************************************************************************************************************************************************************** localhost : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0
Grek 🇺🇦
а с чего вы решили что переменная будет так работать? по-моему надо указать в плейбуке gather_facts="{{ facts }}" и запускать с экстра-варсами --extra-vars "facts=false"
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
inqfen
А как ты в листе хотел firewall.open_ports найти?
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 }}"}
Игорь
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
json_query('[*].i') ok: [localhost] => { "<class 'list'>": "VARIABLE IS NOT DEFINED!" }
"{{ data | json_query('[*].i')}}" Проверил, вот так норм.
Alexander
ok: [pc] => { "msg": [ "1", "2", "3" ] }
Игорь
"{{ data | json_query('[*].i')}}" Проверил, вот так норм.
выше я то же самое проверял, вывод "OK "<class 'list'>": "VARIABLE IS NOT DEFINED!""