Alexandr
Подгрузить - это одно, но ты же хочешь получить переменные? У этого класса есть метод, который умеет возвращать нужную тебе переменную.
вообще странно как то. у меня в group_vars для хоста несколько файлов переменными. а тянется только один (.
Alexandr
вообще странно как то. у меня в group_vars для хоста несколько файлов переменными. а тянется только один (.
from ansible.parsing.dataloader import DataLoader from ansible.vars.manager import VariableManager from ansible.inventory.manager import InventoryManager loader = DataLoader() inventory = InventoryManager(loader=loader, sources='inventory/localhost') variable_manager = VariableManager(loader=loader, inventory=inventory) all_groups = inventory.get_groups_dict() test_node = all_groups['test_srv'] for t in test_node: vars = variable_manager.get_vars(host=inventory.get_host(hostname=t)) for v in vars['ps']['test_srv']['port']: print(v)
Alexandr
в inventory/group_vars/ лежит несколько файлов. а читается только один(
Sergey
в inventory/group_vars/ лежит несколько файлов. а читается только один(
А чем отличается твой загрузчик от штатного ансиблового?
Sergey
судя по докам, ничем
Как выглядит inventory?
Alexandr
в group_vars лежет несколько файлов с
Alexandr
таким содержанием ps: test: host_srv: kafka: и дальше куча секций разных
Sergey
https://t.me/pro_ansible/164393 ^^^
Alexandr
https://t.me/pro_ansible/164393 ^^^
все разобрался(( тестовая среда кривая оказалось ( запустил на норм тачке и все появилось
Alexandr
🤷‍♂️
ага((((
Alexandr
ага((((
а вот теперь не пойму как вытащить значение их {{ variable }}
Ivan
Добрый вечер, коллеги. настраиваю ансибл в новом окружении (на центос 8) столкнулся с проблемой авторизации ансибла на целевых серваках. имеется такая таска: tasks: - name: install vim yum: name=vim state=present become: yes become_method: sudo become_user: user получаю такую ошибку: fatal: [kube1.home]: FAILED! => {"changed": false, "msg": "This command has to be run under the root user.", "results": []} fatal: [kube2.home]: FAILED! => {"changed": false, "msg": "This command has to be run under the root user.", "results": []} На обоих серваках пользователь user входит в группу wheel. на первом серваке прописано даже в sudoers: (что никак не влияет на ошибку) user ALL=(ALL) NOPASSWD: ALL пускать ансибл под рутом очень не хочется. подскажите, есть ли способ заставить ансибл всё таки использовать пользователя user?
Ivan
а у тебя наоборот в ansible.cfg для become не root указан?
там все закомментировано [privilege_escalation] #become=True #become_method=sudo #become_user=root #become_ask_pass=False
Ivan
На самом клиенте из под пользователя yam install работает?
нет. он требует повышения прав а вот sudo yum install работает: [user@kube1 ~]$ yum install vim Error: This command has to be run under the root user. [user@kube1 ~]$ sudo yum install vim Last metadata expiration check: 1:01:08 ago on Sun 18 Oct 2020 03:06:05 PM EDT. Package vim-enhanced-2:8.0.1763-13.el8.x86_64 is already installed. Dependencies resolved. Nothing to do. Complete!
Ivan
Так вам нужно не become_user: user, а просто ansible_user: user для этой таски сделать
не, такая конструкция не работает. ругается на синтаксис: ERROR! conflicting action statements: yum, ansible_user The error appears to be in '/home/user/k8s-ansible/playbook/playbook.yml': line 3, column 7, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: tasks: - name: install vim ^ here
Lamobot
ansible_user можно выставить для connection плагина, а не для таски
Lamobot
https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html#connection-variables
Lamobot
Есть ещё remote_user
Lamobot
Вы заходите на тачку под каким юзером? user или ещё каким-то?
Radik
или просто запусти с припиской -u user
Lamobot
become: yes become_user: root become_method: sudo
Lamobot
Тогда так должно быть
Ivan
или просто запусти с припиской -u user
уже интереснее, но пока ещё неуспешно: ansible-playbook playbook/playbook.yml -i inventory/k8s.ini -u user PLAY [kube] ******************************************************************************************** TASK [Gathering Facts] ********************************************************************************* ok: [kube2.home] ok: [kube1.home] TASK [install vim] ************************************************************************************* fatal: [kube2.home]: FAILED! => {"msg": "Missing sudo password"} fatal: [kube1.home]: FAILED! => {"msg": "Missing sudo password"}
Ivan
Тогда так должно быть
сейчас так и есть
Radik
точно по дефолту под user ансибл коннектится?) а не под той, под который ты на своем компе сидишь)
Radik
если нигде не указывал в инвентори, в ansible.cfg, то под твоей учётной ходит
Radik
или с become
Ivan
дело было как - на всех серваках есть пользак user. именно под ним я запукаю ансибл на серваке с ансиблом. именно под этим пользователем я делал ssh-copy-id с сервака ансибл на остальные серваки
Ivan
Запусти c --ask-become-password и никакого не вводи
ansible-playbook playbook/playbook.yml -i inventory/k8s.ini --ask-become-password usage: ansible-playbook [-h] [--version] [-v] [-k] [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER] [--list-tags] [--step] [--start-at-task START_AT_TASK] playbook [playbook ...] ansible-playbook: error: unrecognized arguments: --ask-become-password
Ivan
--ask-become-pass :)
прошло но при этом у меня запросил пароль ansible-playbook playbook/playbook.yml -i inventory/k8s.ini --ask-become-pass BECOME password: PLAY [kube] ******************************************************************************************** TASK [Gathering Facts] ********************************************************************************* ok: [kube1.home] ok: [kube2.home] TASK [install vim] ************************************************************************************* ok: [kube1.home] changed: [kube2.home] PLAY RECAP ********************************************************************************************* kube1.home : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 kube2.home : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Ivan
и это при том, что на втором серваке я не прописывал sudoers
Ivan
чую проблема с sudoers
похоже на это похоже оно не работает на первом серваке
Ivan
собственно, как писал выше, я там прописал user ALL=(ALL) NOPASSWD: ALL и еще user входит в группу wheel
Ivan
по идее этого должно быть достаточно
Lamobot
собственно, как писал выше, я там прописал user ALL=(ALL) NOPASSWD: ALL и еще user входит в группу wheel
Я не спец, но возможно он использует параметры по первой записи - из группы wheel, и там требуется пароль по умолчанию. Меня поправят спецы по sudoers, если что
Radik
так и есть скорее всего
Ivan
в смысле? удалить его из wheel ?
Radik
покажи sudoers
Lamobot
в смысле? удалить его из wheel ?
Юзера из wheel попробуй убрать
Ivan
покажи sudoers
root ALL=(ALL) ALL user ALL=(ALL) NOPASSWD: ALL %wheel ALL=(ALL) ALL
Lamobot
root ALL=(ALL) ALL user ALL=(ALL) NOPASSWD: ALL %wheel ALL=(ALL) ALL
"When multiple entries match for a user, they are applied in order. Where there are multiple matches, the last match is used (which is not necessarily the most specific match)."
Lamobot
user запись в конец списка
Radik
или удали user а для wheel NOPASSWD
Ivan
user запись в конец списка
так и сделал первый сервак прошёл успешно, второй нет (что логично)
Ivan
спасибо 🙏
Ivan
проблема решена, причина найдена
Anton
Вот nopassword для wheel лучше не делать.
raven428
Привет, чатик. Если в одном task указываю установить модуль для python, который используется в следующем task, последний его не видит. В принципе понятно почему, но что нужно дёрнуть, чтобы увидел? Помогает вызов reboot:, но это как-то слишком. Нагуглил ещё meta: reset_connection, но тогда всё исполнение прекращается и непонятно как потом вернуть соединение без ручного перезапуска плейбука. Ещё пробовал устанавливать через pip вместо пакетов ОС и перемещать установку в pre_tasks - результат тот же. Больше ничего не нагуглилось.
raven428
ну и странно не припомню таких проблем. А у тебя точно pip для того питона ставит, а точно пакеты ос видны для нужного питона. Если руками поставить до запуска роли - работает?
Всё таки неверно написал, сорян. После установки модуля новые факты сами не подтягиваются, а модуль таки виден. Разрешилось через добавление setup: после установки модуля.
George
А можно я побухчу по поводу 2.10? Что они с документацией сотворили? Ничерта же теперь не найти.
Lamobot
А можно я побухчу по поводу 2.10? Что они с документацией сотворили? Ничерта же теперь не найти.
Ещё косяк, если переключиться на 2.9, то поиск ведёт на 2.10 всё равно :)
Alex
все для удобства пользователей
Sergey
А можно я побухчу по поводу 2.10? Что они с документацией сотворили? Ничерта же теперь не найти.
Breaking news жи, ога. Так-то две недели назад здесь поминки по 2.9 справляли.
George
Я ж сказал, "побухтеть". У нас пока что идея "пересидеть 2.10" вообще. Т.е. к 2.10 готовиться (всякие там mode и deprecation), но переходить сразу на 2.11, когда они все безумия миграций в коллекции разрулят (включая те, о которых мы пока не знаем).
Andrey
вопрос: есть тут люди с опытом управления swarm стеками и сервисами из ansible? насколько модули поддерживаемые?
Andrey
ха! я обнаружил что сам задавал похожий вопрос 21 апреля и с тех пор как-то отвечающих не прибавилось...
Andrey
придётся разбираться самому
Fire
Наши роли все работают...
Fire
Даже переписывать не пришлось.
Fire
А, у нас нет AWX.
Andrey
я вот из-за awx как раз и не понимаю. вроде там еще нет 2.10...
Станислав
Салют народы. Такой вопрос: есть хосты, у них в инвентори прописаны ansible_user и ansible_ssh_private_key_file Но такая УЗ с таким ключом еще не на всех хостах создана, но ее надо будет использовать в дальнейшем. Как добавить таску на создание такой УЗ использую root и его ключ.
Станислав
так и делаю. но как ему другие УЗ для таски подсунуть