Александр
Благодарю за помощь!
Aleksey
коллеги, а как бы получить cpu_сount на машине для gcp_compute inventory ? тип проца возвращается а вот это вот всё нет
Aleksey
а. всё разобрался. он после setup будет а не из инвентори
Vladimir
Коллеги, а в плейбук можно инклюдить роли напрямую с git-репозитория? Нашел инфу про requirements.yml для ansible-galaxy, но это, вроде, не совсем то, что мне хочется. https://docs.ansible.com/ansible/latest/galaxy/user_guide.html
Aleksey
это именно то что вам хочется
Aleksey
роль для запуска нужно скачать
Vladimir
😭
inqfen
А в requirements и говориться что и какой версии скачать
Vladimir
Ок. Спасибо
inqfen
А ты думал ansible запустит чудом код, которого у него нет?)
Aleksey
_само_
Vladimir
Как-то поизящней, думал, можно сделать
Vladimir
Ну, ладн
Aleksey
буквы не экономь да.
Aleksey
и файлы не экономь
Vladimir
Я ж правильно понимаю, что обновления роли будут автоматом подтягиваться при запуске плейбука?
Vladimir
Или вручную надо будет прогонять ansible-galaxy install -r requirements.yml
Aleksey
нет не будут
Vladimir
Боль
Aleksey
ansible-galaxy install -r requirements.yml --force-install
Aleksey
так будут. но скорее всего ты хочешь роли что бы имели теги
Aleksey
иначе в какой то момент тебе всё разломает. ругать ты будешь ансибл а надо себя
inqfen
Боль
Не боль а наоборот явное поведение
Vladimir
Убережет от поломок
inqfen
Когда что-то начинает делать действия за тебя это в один момент превратится в проблему
inqfen
Тот же терраформ например - указываешь в манифестах версии провайдеров и где скачать - но качает он только явно через init. И обновляет уже существующие только явно с ключом, так что это поведение общепринятое
Отделение Bereke Bank
Я ж правильно понимаю, что обновления роли будут автоматом подтягиваться при запуске плейбука?
смотря как запускать. если в CI/CD и окружение чистится после прогона пайплайна - galaxy install будет всегда выкачивать самую свежую роль
inqfen
А если ты их не указываешь - сам себе злобный буратино
Отделение Bereke Bank
Не самую свежую, а той версии которая указана
Я так понимаю у него версия имя ветки)
inqfen
Я так понимаю у него версия имя ветки)
Можно прямо хэш коммита указать, если ты с тегами поссорился
Yulik
Всем привет, кто может подсказать как в темплейте конфига можно вывести список айпи адресов групы такого формата ["192.168.0.1", "192.168.0.2"]
Отделение Bereke Bank
Отделение Bereke Bank
Ну если факт другой, типа адреса другого интерфейса, подставь нужный в map
Anastasia
Всем привет, кто может подсказать как в темплейте конфига можно вывести список айпи адресов групы такого формата ["192.168.0.1", "192.168.0.2"]
Добрый день! Я делала это таким образом, не могу сказать, насколько верный подход {% set ips=[] %} {% for host in groups['consul_server'] %} {{ ips.append(host) }} {% endfor %} "start_join": ["{{ '","'.join(ips) }}"]
Yulik
[{{ groups['group_name'] | map('extract', hostvars, [ansible_default_ipv4','address']) | list | join(', ') }}] я пробовал так но получал вывод такого формата [192.168.0.1, 192.168.0.2]
Yulik
я походу понял как
Константин
Добрый день, запускал плейбук на виртуальной машине в вагранте, все нормально работало, а после попытки запустить на dev сервер, падает в ошибку при создании пользователя postgres ### создание пользователя - name: PostgreSQL | Make sure the PostgreSQL users are present postgresql_user: name: "{{item.name}}" password: "{{ item.pass | default(omit) }}" port: "{{postgresql_port}}" state: present login_user: "{{postgresql_admin_user}}" no_log: false become_user: "{{postgresql_admin_user}}" with_items: "{{postgresql_users}}" when: postgresql_users|length > 0 TASK [postgresql : PostgreSQL | Make sure the PostgreSQL users are present] ************************************************************************* failed: [ip] (item={'name': 'root', 'pass': 'pass', 'encrypted': True}) => {"ansible_loop_var": "item", "changed": false, "item": {"encrypted": true, "name": "root", "pass": "pass"}, "module_stderr": "Shared connection to ip closed.\r\n", "module_stdout": "/bin/sh: 1: sudo: not found\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 127}
Salem
/bin/sh: 1: sudo: not found\r\n
Salem
русским по-белому же написано
Константин
так в плейбуке прописано, что become: true become_method: sudo
Salem
так а на хосте у тебя sudo есть?
Salem
и пропал )
inqfen
Пошёл sudo искать
Константин
и пропал )
не, я тут так у меня в таске этой become_user: postgres
Константин
извиняюсь, если туплю, я уже года 3 не трогал все это, а тут пришлось вспоминать по работе
Salem
еще 1 итерация: зайди на дев хост и сделай apt install sudo
Salem
или что там у тебя на дев хосте
Salem
а чтобы такого не было запекай в имадж сразу все, что нужно для . ansible
Константин
я раньше в pre_tasks такое писал
Salem
это неважно если ты потом убираешь . авторизацию руту и по паролю
Full
Народ, нужна подсказка. Модуль replace агрится на строку замены (которая тоже replace): re.error: bad escape \\u at position 109 (line 2, column 62) У меня там в строке действительно присутствует комбинация \u. Причем, это строка с переносами. Вопрос - как это правильно оформить? Экранировать слэш? Кавычки? В доке по модулю деталей никаких не нашел.
Anatoliy
Коллеги, а в плейбук можно инклюдить роли напрямую с git-репозитория? Нашел инфу про requirements.yml для ansible-galaxy, но это, вроде, не совсем то, что мне хочется. https://docs.ansible.com/ansible/latest/galaxy/user_guide.html
у нас пока работает так: roles: - name: src: https://github.com/.... в документации об этом косвенно намекает https://docs.ansible.com/ansible/latest/galaxy/user_guide.html#installing-multiple-roles-from-multiple-files в примерах для коллекций не работает.
Vladimir
День бодрый. может кто подскажет, есть одна роль, развесистая, в которой многие шаги скипаются. Так вот, их скип (казалось бы) выполняется крайне долго, можно реально минут 2-3 ждать, простых скипов шагов. Вопрос, можно ли чего подкрутить, чтобы скип шаги выполнялись шустрее?
Vladimir
[ssh_connection] pipelining = true Пайплайнинг включен, если что
Полина
Привет. Подскажите пожалуйста, можно ли в playbook'е изменять название файла в зависимости от хоста, на котором выполняется таск? Например вот так: file_{{ ansible_hostname }}
Антон
Можно, если указан ansible_hostname
Антон
Как альтернативу можно использовать inventory_hostname
Полина
То есть это будет работать только если я собираю факты с устройства?
Антон
inventory_hostname вроде не является фактом, а ansible_hostname да
Полина
Спасибо
Aleksey
Приветствую, если в переменной хранится username вида username@domain.local. Можно как-то его сразу сплитнуть и присвоить двум переменным? По аналогии с питоновским >>> user,domain = 'username@domain.local'.split('@') >>> user 'username' >>> domain 'domain.local'
Sebor▂▅▇█▓▒░
А может на две переменные разбить?
Aleksey
Ну вот мне и надо данные, получаемые извне получить две переменные
Aleksey
вводить дополнительную переменную для хранения списка после сплита не хочется
Aleksey
Можно вот так, конечно list: '{{ data.split(".") | lower }}' username: {{ list[0] }} domain: {{ list[1] }}
inqfen
>Можно как-то его сразу сплитнуть и присвоить двум переменным user = 'username@domain.local'.split('@')[0] domain = 'username@domain.local'.split('@')[1] прямо в inventory
inqfen
Но да, почему бы изначатьно 2 переменные не передавать
Aleksey
Потому что данные не я передаю
Aleksey
> user = 'username@domain.local'.split('@')[0] > domain = 'username@domain.local'.split('@')[1] Блин, вот я тупой. Спасибо
Aleksey
> user = 'username@domain.local'.split('@')[0] > domain = 'username@domain.local'.split('@')[1] Блин, вот я тупой. Спасибо
Только они будут вот так выглядеть: UserName: '{{ 'username@domain.local'.split("@")[0] | lower }}' UserDomain: '{{ 'username@domain.local'..split("@")[1] | lower }}'
inqfen
Ну да, я работаю и некогда было нормально писать)
inqfen
Суть думаю сразу понял
Александр
Наверное глупость спрошу, извиняюсь :) Разгребал тут старые плейбуки и нашёл вот такой простенький таск по добавлению правила брандмауэра на windows хосты. Так вот, если такого правила с таким именем в винде ещё не было, то таск отрабатывает нормально, но если правило с таким именем уже было, то таск затирает адреса которые были прописаны ранее, и заносит адреса из переменных {ip1_win1} и {ip1_win2}. А желательно чтоб добавлял, а не затирал. Помню сразу решение не нашёл и забил, стал просто давать разные имена правилам. А как в этом случае сделать, чтобы он оставлял старые адреса и добавлял к ним новые? Ткните если не трудно. --- - name: Add firewall rules on server1 for group "staging_win1" and "staging_win2" gather_facts: no hosts: server1 vars: ip1_win1: "{{ groups['staging_win1'] | map('extract', hostvars, ['ansible_host']) | join(',') }}" ip2_win2: "{{ groups['staging_win2'] | map('extract', hostvars, ['ansible_host']) | join(',') }}" tasks: - name: Allow input on TCP port 5555 win_firewall_rule: name: ReportsRules localport: 5555 remoteip: "{{ ip1_win1 }},{{ ip1_win2 }}" action: allow direction: in protocol: tcp state: present enabled: yes