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
если там то, что надо - то вполне.
Fedor
если юзер задаётся, например, в инвентори, например, как ansible_user=, его можно выцепить чем-то типа vars.ansible_user или как-то так.
Fedor
не помню дерева этого
Fedor
ни у кого нет на примете роли, чтоб с дженкинсом поиграться?
Дмитрий Харитонов
вот ansible_user_id лучше подходит, это пользователь которым коннектишься по ssh
Fedor
👍
Дмитрий Харитонов
👍
Оказалось что для моего кейса достаточно
become: no
Дмитрий Харитонов
Fedor
/warn
bebebe
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 громоздкая и делать ее самому не вариант.
У меня философский вопрос: я что-то неправильно спроектировал или роль недостаточно хорошо продумана в смысле гибкости настроек?
Artem
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"
}
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 уходит в себя если есть пакеты, которые нужно собирать.
Constantin
Constantin
Andrei
https://github.com/ansible/ansible/issues/29255
вот отсюда предпоследний ответ это, не вникал, может есть что-то нормальнее.
Constantin
Andrei
не подскажете, как принято?
Andrei
подскажите пожалуйста, как принято генерировать конфиги для сервисов из yaml данных или класть шаблон и использовать template?
в старых книжках и примерах я видел шаблонизацию конфиг файлов, а вот сейчас в ролях постоянно встречаю генерацию конфига на основе переменных, без шаблона. Есть какое-то устоявшееся мнение как стоит делать?
Constantin
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
ясно спасибо.
Sergey
Денис
всем привет, нужен совет, опыта пока маловато.
разворачиваю виндовую машину из образа (пакер + терраформ), в этот момент на ней настроен 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
Денис
я же не могу в середине выполнения модуля поменять ему настройки?