Александр
Благодарю за помощь!
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
это именно то что вам хочется
inqfen
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
Vladimir
Убережет от поломок
inqfen
Когда что-то начинает делать действия за тебя это в один момент превратится в проблему
inqfen
Тот же терраформ например - указываешь в манифестах версии провайдеров и где скачать - но качает он только явно через init. И обновляет уже существующие только явно с ключом, так что это поведение общепринятое
inqfen
inqfen
А если ты их не указываешь - сам себе злобный буратино
Отделение Bereke Bank
Yulik
Всем привет, кто может подсказать как в темплейте конфига можно вывести список айпи адресов групы такого формата
["192.168.0.1", "192.168.0.2"]
Отделение Bereke Bank
Отделение Bereke Bank
Ну если факт другой, типа адреса другого интерфейса, подставь нужный в map
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. Причем, это строка с переносами.
Вопрос - как это правильно оформить? Экранировать слэш? Кавычки? В доке по модулю деталей никаких не нашел.
Vadim "Oxyd"
Vladimir
День бодрый. может кто подскажет, есть одна роль, развесистая, в которой многие шаги скипаются. Так вот, их скип (казалось бы) выполняется крайне долго, можно реально минут 2-3 ждать, простых скипов шагов.
Вопрос, можно ли чего подкрутить, чтобы скип шаги выполнялись шустрее?
Vladimir
[ssh_connection]
pipelining = true
Пайплайнинг включен, если что
Lamobot
Полина
Привет.
Подскажите пожалуйста, можно ли в playbook'е изменять название файла в зависимости от хоста, на котором выполняется таск? Например вот так: file_{{ ansible_hostname }}
Lamobot
Антон
Можно, если указан 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]
Блин, вот я тупой. Спасибо
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