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
Lamobot
Вернее lookup, потом from_json, а потом dict2items
Alex
when: not (node_type == "master" and install_type == "upgrade")
а можно ли подобное условие записать в виде
when:
- node_type == "master"
- install_type == "upgrade"
?
Lamobot
Pavel
Lamobot
Кроме как через multiline json, если вам сильно хочется в две строки
Dmitry
А есть что-то готовое для эмуляции timeout 120 tail -f file | grep -m 1
Alex
Alex
просто для восприятия в две строки удобнее
Гайрат
Dmitry
waitfor не пойдет, ибо нужно именно новые записи
Dmitry
ну в принципе шел тоже пойдет...
Александр
ребят, я сильно извиняюсь за оффтоп, но в наше время (на новом железе, не 100летней давности) вообще, кто-то использует аппаратные рейды?
Tadeusz
ansible'у похер
Mentat
Denis
Господа, подскажите, пожалуйста. Есть Playbook, который запускает роль. У роли в meta/main.yml в dependencies указаны роли, которые я хочу выполнить. Все они лежат в директории roles. Но почему зависимости не выполняются. Что я делаю не так?
Sergey
k
k
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
k
Denis
Он дочерний от galaxy_info
Denis
k
Timur
Timur
Зачем извращения с when?
Andrey
+
Denis
Потому что в будущем будет много хостов с разными платформами, и для каждой платформы будет своя роль
Andrey
по мне так лучше в плейбуке посмотреть, нежели по метам ролей ползать и раскапывать портянку
Andrey
ничего не мешает, сделать - role:1 - role:2
Timur
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 условии
Anonymous
UglyKoyote
странно, у меня not in работает как я ожидаю
https://paste.centos.org/view/74d66957
может я не совсем понял проблему, я не настоящий сварщик
UglyKoyote
твои таски взял, ну только заменил IP и команду во втором shell
Николай
А если двойные кавычки убрать?
UglyKoyote
в when?
Николай
угу
UglyKoyote
не, падает всяко
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
Timur
А какой конкретно код вызывает ошибку?
Petr
- name: Create database
become: True
mysql_db:
name: test
state: present
Timur
А авторизация сделана?
Petr
Очень длинная портянка получилась. Лучше на pastebin?
Timur
Господи
Timur
Зачем столько башсибла?
Timur
Что вы хотите сделать вообще?
Petr
@tgadiev , Идея простая - для root пользователя выставить auth_socket, что бы можно было не задавать для учётки пароль, а просто запускать задачу с become: True.
На centos7 с mysql 7.5 это прекрасно работало. А столько задач просто, что бы была идемпотентность и все дела.
Timur
Поставить mysql?
username
Timur
username
Petr
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 работать отказываются.
username
username
username
Да и вроде то, что Тимур написал это то же самое, только лучше
Anton
Иногда башсибл является вынужденным и быстрым решением, если по нему пройтись корректной обработкой.
username
username
Идемпотентность наше всё