Андрей
И нервов)
Sergey
экономит около 3 символов!
.....а потом [не обязательно эти же] люди хнычут, мол, не могу косвенное обращение (по ключу, чьё название хранится в переменной) реализовать.
k
Кошмар. Кто мне может объяснить, зачем люди пытаются вызывать методы объектов вместо того, чтобы обращаться к значениям словаря по ключам?
О, я знал, что не зря задавался этим вопросом. :)) Ответ такой: Ansible предоставляет возможность пользователю самостоятельно выбирать dot/bracket notation, явно указывая ограничения первого метода: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id19 Кому-то (в т.ч. мне) dot notation видится более приятным и чистым способом писать код. Штош, тут пользователь в своём праве. А вот если пользователь ограничения не изучил, а потом что-то не может, то сам себе буратино, тут полностью согласен.
Sergey
Тут такое дело.... То, что можно через точку, знают, подозреваю, все. Но в голове отделять эти два момента друг от друга - не-а. Отсюда и псевдонеинформативные сообщения об ошибках - метода, мол, нет.
k
О, звучит как идея для PR-а. Можно, как минимум, текст ошибки обогатить уточнением, что "может, вы не метод дернуть хотели, а элемент словарика". Пойду погуглю по issue, вдруг уже есть что-то в этом духе.
Dennis
Здравствуйте, Коллеги! Есть условный модуль для создания учетных записей. Вызвывется сейчас так: - name: create new users (sample) new_user_sample: username: "{{ item.name }}" password: "{{ item.pass }}" ssh_key: "{{ item.key }}" state: present with_items: - { name: 'user1 ', pass: 'PaSsWoRd1', key: 'SSHXXXXXXXXXXXXXXXXX1.XXX' } - { name: 'user2 ', pass: 'PaSsWoRd2', key: 'SSHXXXXXXXXXXXXXXXXX2.XXX' } - { name: 'user3 ', pass: 'PaSsWoRd3', key: 'SSHXXXXXXXXXXXXXXXXX3.XXX' } Хочу перенести это в роль и брать конфиг из host_vars. Описать планирую так: users: user1: password: 'PaSsWoRd1' key: 'SSHXXXXXXXXXXXXXXXXX3.XXX' state: present status: admin user2: password: 'PaSsWoRd2' key: 'SSHXXXXXXXXXXXXXXXXX3.XXX' state: present Вопрос: как обратиться к этой переменной из модуля new_user_sample? Именно синтаксис with_items: не могу понять. Подскажите пожалуйста? Может стоит изменить структуру users?
Lamobot
Здравствуйте, Коллеги! Есть условный модуль для создания учетных записей. Вызвывется сейчас так: - name: create new users (sample) new_user_sample: username: "{{ item.name }}" password: "{{ item.pass }}" ssh_key: "{{ item.key }}" state: present with_items: - { name: 'user1 ', pass: 'PaSsWoRd1', key: 'SSHXXXXXXXXXXXXXXXXX1.XXX' } - { name: 'user2 ', pass: 'PaSsWoRd2', key: 'SSHXXXXXXXXXXXXXXXXX2.XXX' } - { name: 'user3 ', pass: 'PaSsWoRd3', key: 'SSHXXXXXXXXXXXXXXXXX3.XXX' } Хочу перенести это в роль и брать конфиг из host_vars. Описать планирую так: users: user1: password: 'PaSsWoRd1' key: 'SSHXXXXXXXXXXXXXXXXX3.XXX' state: present status: admin user2: password: 'PaSsWoRd2' key: 'SSHXXXXXXXXXXXXXXXXX3.XXX' state: present Вопрос: как обратиться к этой переменной из модуля new_user_sample? Именно синтаксис with_items: не могу понять. Подскажите пожалуйста? Может стоит изменить структуру users?
Переделать словарь в список users: - name: user1 ... - name: user2 ... И использовать его прямо в loop: '{{ users }}' Но про "LDAP на ансибл" здесь уже писали и не раз :)
Отделение Bereke Bank
Здравствуйте, Коллеги! Есть условный модуль для создания учетных записей. Вызвывется сейчас так: - name: create new users (sample) new_user_sample: username: "{{ item.name }}" password: "{{ item.pass }}" ssh_key: "{{ item.key }}" state: present with_items: - { name: 'user1 ', pass: 'PaSsWoRd1', key: 'SSHXXXXXXXXXXXXXXXXX1.XXX' } - { name: 'user2 ', pass: 'PaSsWoRd2', key: 'SSHXXXXXXXXXXXXXXXXX2.XXX' } - { name: 'user3 ', pass: 'PaSsWoRd3', key: 'SSHXXXXXXXXXXXXXXXXX3.XXX' } Хочу перенести это в роль и брать конфиг из host_vars. Описать планирую так: users: user1: password: 'PaSsWoRd1' key: 'SSHXXXXXXXXXXXXXXXXX3.XXX' state: present status: admin user2: password: 'PaSsWoRd2' key: 'SSHXXXXXXXXXXXXXXXXX3.XXX' state: present Вопрос: как обратиться к этой переменной из модуля new_user_sample? Именно синтаксис with_items: не могу понять. Подскажите пожалуйста? Может стоит изменить структуру users?
структура у меня такая же - name: Add admin users user: name: "{{ item.name }}" shell: /bin/bash groups: wheel append: yes password: "{{ item.password }}" loop: "{{ admin_users }}"
Dennis
Cпасибо! Напрвление мне понятно. Сейчас проверю.
Dennis
Коллеги, работает. Спасибо! А как написать условие when, чтобы проверять список на существование или наличие в нем элементов? Чтобы не фэйлился playbook, если в host_vars не определены пользователи.
Evgeny
admin_users|default({})
Evgeny
если admin_users не определен, то падать не должен
Dennis
Спасибо!
Timur
admin_users|default({})
admin_users|default([]) тогда уж
Timur
В лупе список должен быть
Logan
вопрос - возможно ли в ансибле итерироваться по двум неравнозначным loop-ам сразу? проиллюстрирую: - name: create temp folders path: "/var/tmp/{{ a }}-{{ b }}" with_items: - one - two with_another_items: - 1 - 2 - 3 - 4 на выходе хочу получить каталоги вида: one-1, one-2, one-3, one-4, two-1, two-2...
Андрей
Примерно такая же задача. Имею вот это: - name: Create directories file: path: "{{ item }}" state: directory owner: root group: root with_items: - /opt/idm - /opt/idm/logs
Андрей
Хочу, чтобы в with_items вместо пути передавалось {{ some_path }}
Андрей
так вообще можно сделать?
Андрей
- name: Create directories file: path: "{{ item }}" state: directory owner: root group: root with_items: - {{ some_path }} - {{ some_path }}/logs
Андрей
вот что-то типа того
Sergey
так вообще можно сделать?
Можно. Подставь туда вызов шаблонизатора: mylist: - "{{ myvar }}" - "{{ myvar }}/tmp"
Андрей
получается нужно будет шаблон писать? или он подтянет переменную из defaults?
Sergey
получается нужно будет шаблон писать? или он подтянет переменную из defaults?
Зачем? Я же тебе написал уже, сделай похожим образом - и всё, переменную используй любую, которая у тебя есть.
Андрей
Ага, спасибо
Art
Всем привет. Подскажите как накатить N ролей с одним рестартом службы в самом конце? Handler, прописанный в роли, отрабатывает в конце каждой роли, и соответственно, я получаю N рестартов вместо одного
Timur
Хендлер отрабатывает в конце плея, после всех ролей
Алмаз
Всем привет! Скажите пожалуйста что лучше для управления ресурсами облака? Ansible или Terraform? И почему?
inqfen
Ещё один
inqfen
Это разные вещи
inqfen
Или и почитай чат терраформа, только за неделю емнип уже 2 раза спрашивали
Алмаз
Прошу прощения.
Алмаз
Почитаю
Denis 災 nobody
Хендлер отрабатывает в конце плея, после всех ролей
Но иногда нужно именно N рестартов, поэтому была какая-то опция..
Denis 災 nobody
главное, в CloudFormation не лезь
Denis 災 nobody
google: ansible handler
Denis 災 nobody
)
Art
Я ж говорю, хендлер, прописанный в роли, N раз рестартит
Aleksandr
его разве не собственноручно вызываешь через notify?
Timur
Я ж говорю, хендлер, прописанный в роли, N раз рестартит
Что-то не то у вас. Код плейбуки покажите
Art
- hosts: all become: true vars_files: - inventories/prod/group_vars/vars.yml - inventories/prod/group_vars/vault.yml - roles/add-source/vars/netdev.yml roles: - add-source - hosts: all become: true vars_files: - inventories/prod/group_vars/vars.yml - inventories/prod/group_vars/vault.yml - roles/add-source/vars/netdev-wifi.yml roles: - add-source <..> и так N раз
Art
тогда другой вопрос: как внутри одного плея прогнать одну и ту же роль N раз с разными наборами параметров?
Art
Это чтобы страдать? O_o
как правильно сделать, чтобы страдать поменьше?
Sergey
тогда другой вопрос: как внутри одного плея прогнать одну и ту же роль N раз с разными наборами параметров?
Как задача звучит исходная? А то проблему микроскопа чот стрёмно решать в очередной раз.
Timur
тогда другой вопрос: как внутри одного плея прогнать одну и ту же роль N раз с разными наборами параметров?
roles: - role: app_user vars: myname: Ian - role: app_user vars: myname: Terry - role: app_user vars: myname: Graham - role: app_user vars: myname: John
Art
Как задача звучит исходная? А то проблему микроскопа чот стрёмно решать в очередной раз.
Раскатить пайплайны для N разных источников с разными параметрами. Для раскатки пайплайна существует роль add-source, которая раскатывает любой источник с любым набором параметров
Empty
Добрый вечер. Может кто подскажет почему ansible all -m ping -u root не проходит. По ssh под root по 22 порту захожу, в ansible hosts IP прописал
Николай
-vvv подскажет
Empty
-vvv подскажет
Спасибо, разобрался!
Михаил
https://github.com/arenadata/ansible-module-yandex-cloud А кто-нибудь автора знает?)
Iwan
Всем привет, подскажите пожалуйста. У меня есть роль, можно ли её раскатывать на два разных серверах из одного плейбука? Для одного сервера берутся переменные из групп варс, для второго из хост варс. Правильный ли я подход делаю? Или так не делают?( Цель не плодить роль для каждой среды из-за переменных..
Iwan
Разные группы используйте
либо разбить на хост-варс сразу?
Iwan
fatal: [nsi-web]: FAILED! => { "msg": "The task includes an option with an undefined variable. The error was: 'nsi_backend' is undefined\n\nThe error appears to be in '/root/nsi-ansible/roles/backend/tasks/main.yml': line 6, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: nsi-backend | Backend\n ^ here\n" } Ловлю просто ошибку на втором сервере, при запуске для одного сервера из групп-варс, для второго из хост-варс.. Похоже где-то затык с переменой?
checkdiff
Да с nsi_backend
Iwan
где может быть затык?.. В роле так: - name: nsi-backend docker_container: name: "{{ nsi_backend.service_name }}" Для одного сервера так: nsi_backend: service_name: nsi-backend-testing Для второго: nsi_backend: service_name: nsi-backend-develop И не знаю в какую сторону посмотреть...
k
где может быть затык?.. В роле так: - name: nsi-backend docker_container: name: "{{ nsi_backend.service_name }}" Для одного сервера так: nsi_backend: service_name: nsi-backend-testing Для второго: nsi_backend: service_name: nsi-backend-develop И не знаю в какую сторону посмотреть...
Выше ты пишешь, что в одном случае значение берется из group_vars, а в другом из host_vars - зачем по-разному? Что если для каждого сервера указать в host_vars отдельное значение? По ситуации и ошибке кажется, что второй сервер и не входит в группу, и под host_vars не попадает.
k
Сначала да, для одного из групп варс, сейчас переделал на хост варс и второй. Но теперь вообще не схватывает.. переменные..
Отлично, значит host_vars неправильно указаны. Можешь показать пути до файлов в host_vars и собственно имена хостов, как в inventory?
Iwan
Отлично, значит host_vars неправильно указаны. Можешь показать пути до файлов в host_vars и собственно имена хостов, как в inventory?
Да, выглядит это так: tree inventories/dev inventories/dev ├── hosts.ini └── host_vars ├── nsi_ci.yml └── nsi_web.yml полный путь такой: ll /root/nsi-ansible/inventories/dev/host_vars total 8.0K -rw-r--r-- 1 root root 494 Mar 31 20:36 nsi_ci.yml -rw-r--r-- 1 root root 494 Mar 31 20:36 nsi_web.yml Сам инветори: [all] nsi-ci ansible_host=172.22.130.63 ansible_ssh_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa nsi-web ansible_host=172.22.130.62 ansible_ssh_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa [nsi_ci] nsi-ci [nsi_web] nsi-web
Iwan
Вроде надо nsi_ci.yml переименовать в nsi-ci.yml, хост же так называется.
О действительно... А я почему-то делал группы по названию из - [nsi_ci]
k
Спасибо большое! Профукал этот момент(
Бывает :) Не за что, успехов!