Tadeusz
хм, а почему может не работать хендлер (старт/рестарт)?
Tadeusz
- name: Copy .my.cnf file with root password credentials template: src=root.my.cnf.j2 dest=/root/.my.cnf mode=0600 notify: - restart mysql TASK [percona : Copy .my.cnf file with root password credentials] ******************************************************************************************************************************************************************************************************************************************************************************** ok: [percona1] ok: [percona2] ok: [percona0] и все, след шаг уже валится из-за стопнутого мускула
Дмитрий Харитонов
Подскажите, делаю всю роль под рутом, а один таск мне нужно выполнить под текущим пользователем. Как это сделать? Можно поставить become_user на эту таску, но как сделать когда пользователь зараннее не известен?
Tadeusz
# cat ../handlers/main.yml --- - name: restart mysql service: name=mysql state=restarted
Fedor
если там то, что надо - то вполне.
Fedor
если юзер задаётся, например, в инвентори, например, как ansible_user=, его можно выцепить чем-то типа vars.ansible_user или как-то так.
Fedor
не помню дерева этого
Fedor
ни у кого нет на примете роли, чтоб с дженкинсом поиграться?
Дмитрий Харитонов
вот ansible_user_id лучше подходит, это пользователь которым коннектишься по ssh
Fedor
👍
Дмитрий Харитонов
👍
Оказалось что для моего кейса достаточно become: no
Дмитрий Харитонов
Fedor
/warn
Tadeusz
есть варианты?)
bebebe
Особо нет
Tadeusz
ну оно и понятно)
Tadeusz
ну вот… ставлю Percona-XtraDB-Cluster-57 - стартую - нет временного пароля в логе… это пиздец какой-то
Fedor
а вручную если повторить, появляется?
Fedor
именно по инструкции
Andrei
скажите пожалуйста, я использую роль https://github.com/Vinelab/ansible-supervisor чтобы поставить supervisor, роль включена как dependencies в meta/main.yml мой роли программного компонента (без supervisor он не имеет смысла, поэтому указана в зависимости, а не отдельно) Настройки всех запускаемых программ передаются как переменная supervisor.programs В процессе стало понятно, что так передавать эти настройки неудобно, так как у компонента они громоздкие, получается нечитаемо. Если бы можно было просто ей скормить готовый конфиг было бы удобнее. Как вариант я думаю сделать import_role с пустым списом программ, потом скопировать конфиг, потом дернуть хендлер роли чтобы перечитались настройки. Но мне такое решение кажется громоздким, но отказаться от роли я не могу, т.к. установка на centos громоздкая и делать ее самому не вариант. У меня философский вопрос: я что-то неправильно спроектировал или роль недостаточно хорошо продумана в смысле гибкости настроек?
Tadeusz
да вот нет
Artem
как-то чинил такое
Artem
вроде
Artem
cat /var/log/mysqld.log |grep generated здесь нет?
Tadeusz
ну нет же)
Artem
она вообще стартанула(перкона)? в конфиге какой лог прописан?
Tadeusz
стартанула, да, и путь тот же
Tadeusz
хм, теперь есть, странно
Tadeusz
TASK [percona : Echo temp pass] ****************************************************************************************************************************************************************************************************************************************************************************************************************** ok: [percona0] => { "msg": "yP7oa_Xaf#i." } ok: [percona1] => { "msg": "c8ofDrInDU;V" } ok: [percona2] => { "msg": "n,lwuNs6.f.R" }
Tadeusz
Aug 13 19:37:20 percona0.cloud.servers.com mysql-systemd[4653]: /usr/bin/mysql-systemd: line 140: kill: (4651) - No such process Aug 13 19:37:20 percona0.cloud.servers.com mysql-systemd[4653]: ERROR! mysqld_safe with PID 4651 has already exited: FAILURE Aug 13 19:37:20 percona0.cloud.servers.com systemd[1]: mysql@bootstrap.service: control process exited, code=exited status=1 Aug 13 19:37:20 percona0.cloud.servers.com mysql-systemd[5094]: WARNING: mysql pid file /var/run/mysqld/mysqld.pid empty or not readable Aug 13 19:37:20 percona0.cloud.servers.com mysql-systemd[5094]: ERROR! mysql already dead Aug 13 19:37:20 percona0.cloud.servers.com systemd[1]: mysql@bootstrap.service: control process exited, code=exited status=2 Aug 13 19:37:20 percona0.cloud.servers.com mysql-systemd[5124]: WARNING: mysql pid file /var/run/mysqld/mysqld.pid empty or not readable Aug 13 19:37:20 percona0.cloud.servers.com mysql-systemd[5124]: WARNING: mysql may be already dead Aug 13 19:37:20 percona0.cloud.servers.com systemd[1]: Failed to start Percona XtraDB Cluster with config /etc/sysconfig/mysql.bootstrap. -- Subject: Unit mysql@bootstrap.service has failed крутейшая перкона… даже стартануть не смогла
Sergey
можно, но it depends (ты же про то, что будет выведено на экран при вызове таски?)
Sergey
Тогда так: тупо с with_items не работает, не трать время.
Sergey
😊))))
Sergey
пожалуйста. но если вставишь переменную либо на loop перепишешь... 😊
Vadim
можно - https://github.com/openshift/openshift-ansible/blob/master/playbooks/aws/openshift-cluster/build_ami.yml#L11
Sergey
здесь не простой хэш передаётся, а с вложениями.
Sergey
поэтому, видимо, работает. но чаще, если честно, нет.
Sergey
да, там список
Sergey
да, факт.
Sergey
интересующий тебя кусок, кстати, находится тут: res['_ansible_item_label'] = templar.template(label)
Sergey
то есть Jinja-шаблонизация вызывается. как говорится, "да, но нет".
Sergey
это, если что, ansible/lib/python2.7/site-packages/ansible/executor/task_executor.py
Vadim
а, ты хочешь весь dict туда засунуть? Преврати в строку сначала
Sergey
with_items - list так-то
Sergey
то бишь список
Sergey
а для перебора пар "ключ-значение" как раз и есть отдельный with_dict
Artem
А какая причина была, что стартануть не могла?
Alexandr
подскажите пожалуйста, кто пробовал из динамического inventory сгенерировать статический файл? Меня конкретно интересует GCD gce.py
Andrei
подскажите пожалуйста, как принято генерировать конфиги для сервисов из yaml данных или класть шаблон и использовать template? в старых книжках и примерах я видел шаблонизацию конфиг файлов, а вот сейчас в ролях постоянно встречаю генерацию конфига на основе переменных, без шаблона. Есть какое-то устоявшееся мнение как стоит делать?
Constantin
Ребят, кто деплоил NodeJS приложение, вы не замечали, что у вас таск с модулем npm, в котором нужно собирать и билдить нативные модули уходит в себя? node-gyp просто жрет CPU и MEM, долго, пробовал час медитировать над ним. Причем, если зайти и запустить руками npm i --only=production все ок собирается
Andrei
npm: path: "{{ project_dir }}/smpp_nodejs" state: present executable: /usr/bin/npm --unsafe-perm=true --allow-root
Andrei
без этого у меня на centos уходит в себя если есть пакеты, которые нужно собирать.
Andrei
https://github.com/ansible/ansible/issues/29255 вот отсюда предпоследний ответ это, не вникал, может есть что-то нормальнее.
Constantin
https://github.com/ansible/ansible/issues/29255 вот отсюда предпоследний ответ это, не вникал, может есть что-то нормальнее.
Судя по тому, что таск бага закрыли без решения, думаю не скоро починят. Спасибо большое за помощь!
Andrei
не подскажете, как принято?
Andrei
подскажите пожалуйста, как принято генерировать конфиги для сервисов из yaml данных или класть шаблон и использовать template? в старых книжках и примерах я видел шаблонизацию конфиг файлов, а вот сейчас в ролях постоянно встречаю генерацию конфига на основе переменных, без шаблона. Есть какое-то устоявшееся мнение как стоит делать?
Constantin
подскажите пожалуйста, как принято генерировать конфиги для сервисов из yaml данных или класть шаблон и использовать template? в старых книжках и примерах я видел шаблонизацию конфиг файлов, а вот сейчас в ролях постоянно встречаю генерацию конфига на основе переменных, без шаблона. Есть какое-то устоявшееся мнение как стоит делать?
У меня конфиги в JSON, и я их в большинстве своем собираю из темплейтов. Проблем с этим не встречал. C yml наверно тоже можно спокойно не париться и делать темплейтами, главное смотрите, чтобы jinja не наделал лишних отступов, он это может
Andrei
ясно, спасибо.
Constantin
А так, если плэйбук легко читать, легко поддерживать и вам комфортно с ним работать, можно использовать то, что нравится, и не deprecated в будущем, в самом Ansible
Oleksandr
подскажите пожалуйста, как принято генерировать конфиги для сервисов из yaml данных или класть шаблон и использовать template? в старых книжках и примерах я видел шаблонизацию конфиг файлов, а вот сейчас в ролях постоянно встречаю генерацию конфига на основе переменных, без шаблона. Есть какое-то устоявшееся мнение как стоит делать?
по ситуации. если нужно менять сразу много параметров - их проще шаблонизировать через jinja. если 1-2 параметра, можно lineinfile. но например для изменения конфигов опенстека мне вообще очень подошел ini_file модуль, удобно менять параметры такой вот таской - name: Populate cinder config file ini_file: path: /etc/cinder/cinder.conf section: "{{ item.section }}" option: "{{ item.option }}" value: "{{ item.value }}" with_items: - { section: "database", option: "connection", value: "mysql+pymysql://cinder:{{ os_cinder_mysql_password }}@controller/cinder" } - { section: "DEFAULT", option: "transport_url", value: "rabbit://openstack:{{ os_env_rabbitmq_openstack_password }}@controller" } - { section: "DEFAULT", option: "auth_strategy", value: "keystone" } - { section: "keystone_authtoken", option: "auth_uri", value: "http://controller:5000" } - { section: "keystone_authtoken", option: "auth_url", value: "http://controller:5000" } - { section: "keystone_authtoken", option: "memcached_servers", value: "controller:11211" }
Oleksandr
единственный на мой взгляд недостаток шаблонов jinja для конфигов - можно упустить добавление какого-то нового параметра в конфиге с выходом новой версии пакета и не учесть это в шаблоне
Andrei
ясно спасибо.
Денис
всем привет, нужен совет, опыта пока маловато. разворачиваю виндовую машину из образа (пакер + терраформ), в этот момент на ней настроен winrm без шифрования, ансиблом хочу ввести в домен, и чтобы групповые политики настроили winrm на керберос (на сколько я понял, ансибл без костылей не настроит winrm). Возникает проблема, что модуль win_reboot успешно загоняет машину в ребут, а получить инфу о её поднятии не может (потому что тип подключения изменился при старте машины). В итоге ошибка, и плейбук ломается. Как лучше это решить? Пока думал над такими вариантами: - ввести в домен, а winrm настроить через костыль а не гпо (например, scheduled task) - ввести в домен, перезагрузить просто через powershell (тогда непонятно по ожиданию сколько ставить) - игнорировать ошибку модуля win_reboot (та же проблема с таймаутом) - Настроить гпо на определенную группу в домене, ввести в домен (не применяя пока настройки winrm), перезагрузить, запустить следующий таск с уже нормальными параметрами подключения, добавить хост в группу в AD, применить групповую политику. Последний вариант кажется мне наименее костыльным. Может кто делал уже подобное, и есть более красивый способ? Возможно на более ранних этапах что-то поменять (но планирую упарвлять все равно доменным пользователем)
Natalia
привет. а какая у тебя цель? если подключение виндовых машинок к ансиблу и настройка winrm, то можно написать powershell скриптик на всю эту беду. для Authentication Options CredSSP никакие костыли не понадобились
Денис
цель ввести машину в домен, ну и потом деплоить приложение На момент первого подключения ансибла там winrm уже настроен, проблема в том, что после входа в домен, меняются настройки winrm
Денис
из-за того что меняются настройки winrm, падает модуль win_reboot, потому что он начинает работать, когда включена basic authentication, а должен закончить, когда есть только керберос
Денис
точнее даже не так, получается цель: зайти на машину локальным пользователем, ввести машину в домен, перезагрузить чтобы изменения вступили в силу, поменять настройки winrm, дальше ходить всегда доменным пользователем
Денис
проблема на этапе перезагрузки, приходится какие-то костыли придумывать
Mikhail
всем привет, нужен совет, опыта пока маловато. разворачиваю виндовую машину из образа (пакер + терраформ), в этот момент на ней настроен winrm без шифрования, ансиблом хочу ввести в домен, и чтобы групповые политики настроили winrm на керберос (на сколько я понял, ансибл без костылей не настроит winrm). Возникает проблема, что модуль win_reboot успешно загоняет машину в ребут, а получить инфу о её поднятии не может (потому что тип подключения изменился при старте машины). В итоге ошибка, и плейбук ломается. Как лучше это решить? Пока думал над такими вариантами: - ввести в домен, а winrm настроить через костыль а не гпо (например, scheduled task) - ввести в домен, перезагрузить просто через powershell (тогда непонятно по ожиданию сколько ставить) - игнорировать ошибку модуля win_reboot (та же проблема с таймаутом) - Настроить гпо на определенную группу в домене, ввести в домен (не применяя пока настройки winrm), перезагрузить, запустить следующий таск с уже нормальными параметрами подключения, добавить хост в группу в AD, применить групповую политику. Последний вариант кажется мне наименее костыльным. Может кто делал уже подобное, и есть более красивый способ? Возможно на более ранних этапах что-то поменять (но планирую упарвлять все равно доменным пользователем)
Там таймаут можно ставить и количество попыток
Денис
ну он никогда не подключится, он же пытается все еще с basic, а он там уже выключен
Mikhail
ну он никогда не подключится, он же пытается все еще с basic, а он там уже выключен
А. Слушай, я в шаблон виртуалки просто добавил настройку winrm при запуске
Денис
я же не могу в середине выполнения модуля поменять ему настройки?