Pavel
я взял конструкцию loop: "{{ lookup('dict', lookup('file', '/opt/gitlab/cmdb/cmdb_service_grafana.json') ) }}" но он логично выдает ошибку ERROR! An unhandled exception occurred while running the lookup plugin 'dict'. Error was a <class 'ansible.errors.AnsibleError'>, original message: with_dict expects a dict я понимаю, что так "в лоб" это неправильно, но как именно не очень понимаю (
Pavel
Коллеги подскажите куда смотреть, может изначально неправильный путь
Lamobot
Вернее lookup, потом from_json, а потом dict2items
Alex
when: not (node_type == "master" and install_type == "upgrade") а можно ли подобное условие записать в виде when: - node_type == "master" - install_type == "upgrade" ?
Pavel
Вернее lookup, потом from_json, а потом dict2items
Ага спасибо, направление понятно
Alex
Это в булеву алгебру, по-моему, при раскрытии скобок получится операция ИЛИ
мне надо выполнять таск во всех случаях, за исключением когда node_type="master", а install_type="upgrade"
Lamobot
мне надо выполнять таск во всех случаях, за исключением когда node_type="master", а install_type="upgrade"
Я про то, что ваше выражение при раскрытии скобок получается таким: when: (node_type != "master") or (install_type != "upgrade") И в 2 строки when: его не записать
Lamobot
Кроме как через multiline json, если вам сильно хочется в две строки
Dmitry
А есть что-то готовое для эмуляции timeout 120 tail -f file | grep -m 1
Alex
просто для восприятия в две строки удобнее
Dmitry
Какая исходная задача?
2 миуты проверять access_log на появление патерна
Dmitry
waitfor не пойдет, ибо нужно именно новые записи
Dmitry
ну в принципе шел тоже пойдет...
Александр
ребят, я сильно извиняюсь за оффтоп, но в наше время (на новом железе, не 100летней давности) вообще, кто-то использует аппаратные рейды?
Tadeusz
ansible'у похер
Mentat
ребят, я сильно извиняюсь за оффтоп, но в наше время (на новом железе, не 100летней давности) вообще, кто-то использует аппаратные рейды?
Тот, у кого есть деньги на нормальный рейд с батарейкой и кэшем, и кто понимает все выгоды и пролюбы от такого варианта
Denis
Господа, подскажите, пожалуйста. Есть Playbook, который запускает роль. У роли в meta/main.yml в dependencies указаны роли, которые я хочу выполнить. Все они лежат в директории roles. Но почему зависимости не выполняются. Что я делаю не так?
k
ребят, я сильно извиняюсь за оффтоп, но в наше время (на новом железе, не 100летней давности) вообще, кто-то использует аппаратные рейды?
Стараюсь избегать вообще всегда, но у меня это детская фобия: как-то контроллер сгорел, а нужной модели на замену у ДЦ не было :)
Denis
Как именно запускает роль твой плейбук?
Сам playbook: - hosts: all roles: - role: firebird tags: - firebird when: inventory_hostname in groups['linux'] Запускаю: ansible-playbook firebird.yml Кусок из meta/main.yml роли firebird dependencies: - role: linux - role: nginx - role: nodejs
Denis
Он дочерний от galaxy_info
Denis
dependencies должно быть корневым элементом, а у Вас там вроде 2 пробела впереди?
да, спасибо, заработало. Нужно было его вынести из galaxy_info
Timur
Зачем извращения с when?
Andrey
+
Denis
Потому что в будущем будет много хостов с разными платформами, и для каждой платформы будет своя роль
Andrey
Потому что в будущем будет много хостов с разными платформами, и для каждой платформы будет своя роль
- hosts: шиндовс roles: - role: lin - hosts: линапс roles: - role: astra tags: - firebird - hosts: windows roles: - role: wind tags: - firebird
Andrey
по мне так лучше в плейбуке посмотреть, нежели по метам ролей ползать и раскапывать портянку
Andrey
ничего не мешает, сделать - role:1 - role:2
Timur
Не нужно втыкать программирование на ансибле без необходимости, если задача реализуется стандартными инструментами
Anonymous
Добрый вечер, как бы вы реализовали проверку условий? tasks: - name: check that ip is created # 192.168.1.1 shell: ip a | grep '192.168.1.1' register: ip_exists - name: Execute script script shell: script/main.sh when: "'192.168.1.1/12' in ip_exists.stdout" register: chameleon_result в данномм плейбуке таск выполняется если ипшник в выводе, каким образом можно сделать условие: если ипшник не в выводе not in и find пробывал пример stdout: "stdout": " inet 192.168.1.1/12 brd 10.42.251.251 scope global secondary br777",
UglyKoyote
точка лишняя - опечатка? в when условии
UglyKoyote
странно, у меня not in работает как я ожидаю https://paste.centos.org/view/74d66957 может я не совсем понял проблему, я не настоящий сварщик
UglyKoyote
твои таски взял, ну только заменил IP и команду во втором shell
Николай
А если двойные кавычки убрать?
UglyKoyote
в when?
Николай
угу
UglyKoyote
не, падает всяко
Anonymous
твои таски взял, ну только заменил IP и команду во втором shell
там где у тебя print b, у меня в ошибку выпадает https://paste.ubuntu.com/p/SFdCvMpBYF/
Anonymous
вроде понял, дело в том, что в dry-run крутил и там просто не было этой переменной)
Petr
Ребята, доброго времени суток! Centos8, mysql-server 8.0.17 из AppStream. С включённым plugin auth_socket для пользователя root@localhost отказываются работать плагины ansible: mysql_db, mysql_user запущенные конечно же с become: True Ошибка: fatal: [centos8]: FAILED! => changed=false msg: 'unable to find /root/.my.cnf. Exception message: (1698, u"Access denied for user ''root''@''localhost''")' При этом если самому подключиться по ssh и ввести в терминал sudo mysql - консоль успешно открывается. Подобной проблемы на centos7 с mysql из http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm таких проблем не было и всё работало без пароля для административной учётки. Кто-нибудь сталкивался?
Timur
Какая версия ансибла?
Timur
А какой конкретно код вызывает ошибку?
Petr
- name: Create database become: True mysql_db: name: test state: present
Timur
А авторизация сделана?
Petr
tasks/main.yml - name: Check auth_socket plugin status become: True command: > mysql -e "SELECT plugin_status FROM information_schema.plugins WHERE plugin_name='auth_socket';" register: check_auth_socket_plugin_status changed_when: False - name: Enable auth_socket plugin become: True command: mysql -e "INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';" vars: isActive: "{{ 'ACTIVE' in check_auth_socket_plugin_status.stdout }}" when: not isActive - name: Change plugin for root@localhost user become: True command: > mysql -vv -e "UPDATE mysql.user SET plugin='auth_socket' WHERE user='root' AND host='localhost';" register: change_plugin_for_root_localhost vars: isPluginChanged: "{{ 'Changed: 1' in change_plugin_for_root_localhost.stdout }}" changed_when: isPluginChanged notify: Reload mysql user table handlers/main.yml - name: Reload mysql user table become: True command: mysql -vv -e "FLUSH PRIVILEGES;"
Petr
Очень длинная портянка получилась. Лучше на pastebin?
Timur
Господи
Timur
Зачем столько башсибла?
Timur
Что вы хотите сделать вообще?
Petr
@tgadiev , Идея простая - для root пользователя выставить auth_socket, что бы можно было не задавать для учётки пароль, а просто запускать задачу с become: True. На centos7 с mysql 7.5 это прекрасно работало. А столько задач просто, что бы была идемпотентность и все дела.
Timur
Поставить mysql?
Petr
Так а плейбук точно из под рута запущен?
Нет, только отдельные задачи, по необходимости.
username
Нет, только отдельные задачи, по необходимости.
Ну так а оно жалуется на то что не может получить доступ к /root/.my.cnf соответственно это надо как-то решить
Petr
become user у вас кто?
дефолтный root
Petr
Собственно если просто подключиться по ssh к серверу и сделать sudo mysql то автоматом попадаешь в консоль mysql от root без всяких паролей. Это как раз позволяет mysql plugin auth_socket который я этой партянкой включаю.
username
дефолтный root
а чего он тогда свой же файл .my.cnf не может найти? Он вообще есть?
Petr
а чего он тогда свой же файл .my.cnf не может найти? Он вообще есть?
Этого файла физически нет. Я пробовал создавать и прописывать туда логин, хост, вот это всё. Сути это к сожалению не меняет. Тут проблема с самим ansible походу, потому что ведь из: - name: test become: True command: mysql -e "..." с сервером работать могу, а вот mysql_db и mysql_user работать отказываются.
Petr
https://github.com/ansible/ansible/issues/47736#issuecomment-462128071 Такое пробовали?
Вот блин! Это оно! Я до этого пробовал безуспешно: login_unix_socket: /var/lib/mysql/mysqlx.sock (ссылку нашёл в /var/log/mysql/mysql.sock) Сейчас добавил к таске по вашей ссылке: login_unix_socket: /var/lib/mysql/mysql.sock и всё заработало. Спасибо!!
username
Да и вроде то, что Тимур написал это то же самое, только лучше
Anton
Иногда башсибл является вынужденным и быстрым решением, если по нему пройтись корректной обработкой.
Petr
Велком, но рекомендую все же от башсинбла отказаться, по-любому естб более красивое решение
Ну, если есть какая-нибудь известная альтернатива - рад буду перенять опыт :) Я только-только познакомился с ansible и пока основательно так косячу :)
username
Идемпотентность наше всё