Alex
а в чем проблема поставить клиента?
Sergei
ды чет не прикольно, образ с ансиблом, пихать туда все подряд ниахота
Andor
python3-mysql есть?
Sergei
есть
Denis
а что именно вытащить надо?
Все. есть скрипт которому нужно будет передать env: qa или staging, а далее взять оттуда список серверов
Denis
и так же передать скрпту в цикле
PsyDebug
ды чет не прикольно, образ с ансиблом, пихать туда все подряд ниахота
Тебе дамп разово или на постоянной основе переливать?
Sergei
Тебе дамп разово или на постоянной основе переливать?
а есть разница? вообще разово, но где разово, там и постоянно :D
PsyDebug
а есть разница? вообще разово, но где разово, там и постоянно :D
Есть. Ну скажем если это под базу, чтоб тесты на эталонных данных прогнать, то одно решение, если что-то другое, то другое решение
Sergei
ды это для локальной разработки, костылю что то типа бутстрапа , который подымает мускули , редисы и прочие, и шарит между проектами
Sergei
https://docs.ansible.com/ansible/latest/modules/mysql_db_module.html
это я смотрел, там момент, прежде чем сделать импорт, я должен загрузить файл на хост, а я не могу этого сделать, лол
Sergei
ну смысле нет ни волюмов, ни ссх, ни питона. Есть только 3306 порт %)
Timur
С локалхоста можете попробовать
Denis
Подскажите, пожалуйста, как правильно получить такую конструкцию msg: "{{ item.servers.{{ target_env}} }}" Есть list, в него вложены dict, перебираю этот список loop-м, и хочу получить определеное значение по ключу, которое берется из переменной
inqfen
народ, памагити - name: get disks ids set_fact: ebs_ids: | {%- set ebs_id_mounts = dict()-%} {%- for device, dir in mounts.items() -%} {%- for dev_map in inventory_hostname["block_device_mappings"] -%} {%- if device == dev_map["device_name"] -%} {%- set device_id = "{{ dev_map['volume_id'] | replace ('-', '')}}"-%} "{{ ebs_id_mounts | combine(device_id: dir) }}" {%- endif -%} {%- endfor -%} {%- endfor -%} {{ ebs_id_mounts }} 100% где-то тупая ошибка, но я ее в упор не вижу, глаз видимо замылился
inqfen
с loop
inqfen
А, ошибка у меня template error while templating string: expected token ',', got ':'.
Sergey
мммм.... а точно после {% нужно тире? и перед %}?
это "сжиралка пробелов/newline"
inqfen
Да, это чтобы не добавлялись пробелы
Антон
то есть такой темплейт будет в одну строчку без пробелов?
Sun
Парни, вопрос: Есть группа пользователей, которой разрешён доступ на сервер с разными правами. Они выкатываются, всё ок. А можно анзиблей сделать так, чтобы других пользователей на сервере не было?
Sun
Т.е., условно, надо похерить всех, кроме системных и тех, кому можно заходить.
inqfen
то есть такой темплейт будет в одну строчку без пробелов?
Там на выходе dict будет, а не строка где значения и пробелы тогда
Sun
можно
а ударь меня в лицо примером?
Антон
а ударь меня в лицо примером?
боюсь сейчас гуглом по попе отшлепают =)
Sun
я чот туплю составить запрос
inqfen
Пример надо с гитлаба, который сейчас недоступен забирать, но в целом - получаешь в список всех юзеров с машины, удаляешь из него тех, которые должны быть через фильтр difference
inqfen
и тех, кто получился - удаляешь через loop
inqfen
Только всяких системных не погрохай
inqfen
типа www-data, root и прочее вот это все
Denis
эм, ты полностью таск покажи
https://gist.github.com/dyudin0821/5a929acdea9bc6aebbdd6aa5429c850b
Denis
Задача перевести код который есть на питоне в ансибл
Антон
это тестовое задание на собесе?
Denis
нет, это попытки написать костыль
Denis
очень странная задача, знаю. Но надо
Антон
а почему просто не запускать ансиблом питоновский скрипт?
inqfen
Так, со своей задачей разобрался, забыл в combine усы поставить
Denis
Есть задача зарегистрировать сервис в консуле при помощи HTTP API. Написал скрипт. Его будет дергать ансибл. Теперь задача расписать параметры для регистарции сервисов в ansible
Алексей
Всем привет. Скажите, пожалуйста, нужно ли ставить сам пакет ansible через штатный пакетный менеджер на целевой хост? Как я понимаю, нужно ставить только питоновские модули, но сам ansible там не нужен...
Denis
У меня получается 2 вложенных цикла, я их и хочу реализовать
Denis
На целевой машине, нужен только Python
Антон
у тебя первый цикл заменяется группой в hosts
Denis
у тебя первый цикл заменяется группой в hosts
увы нет, сам ансибл будет запускаться локально
Sun
типа www-data, root и прочее вот это все
я примерно так и представлял себе это. 🙂
Антон
Антон
или он будет запускаться на каждом хосте из списка?
Denis
нет. Задача этого плейбку просто зарегать сервис. То есть отправить в консул параметры и все
Denis
мне нужно решить только вопрос с 2 вложеностью
Denis
и я слабо понимаю как это сделать
Антон
можно через include и там уже написать второй шаг с циклом
Антон
я буквально вчера с этим воевал, но в итоге мне удалось обойтись через when + loop
Denis
Если не сложно, мне пример показать?
Антон
- name: create new cert when domain names list is changed shell: > certbot certonly --dns-cloudflare --dns-cloudflare-credentials cloudflare.ini --preferred-challenges dns-01 --non-interactive --quiet --agree-tos --email postmaster@ltfs.tools --cert-name {{ item.name }} -d '{{item.domain_names | join("','") }}' when: - (vars_domain_names | difference(secrets_domain_names) | length != 0) or (secrets_domain_names | difference(vars_domain_names) | length != 0) - (scope_status | selectattr('name', 'equalto' , item.name ) | map (attribute='name') | list)[0] == item.name vars: vars_domain_names: "{{ (scope_status | selectattr('name', 'equalto' , item.name ) | map (attribute='vars_domain_names') | list)[0] }}" secrets_domain_names: "{{ (scope_status | selectattr('name', 'equalto' , item.name ) | map (attribute='secrets_domain_names') | list)[0] }}" loop: "{{ domains_scope }}"
Антон
основной смысл в том, что я в when делаю выборку когда должно сработать действие
Denis
спасибо, пошел пробовать
Sergei
С локалхоста можете попробовать
чет не fatal: [localhost]: FAILED! => {"changed": false, "msg": "target /bootstrap/files/dump.sql does not exist on the host
Pit
подскажите люди добрыи. Запуск: find playbooks/ -maxdepth 1 -name '*.yml' ! -name '.*' ! -name 'requirements.yml' ! -path './venv/*' | xargs ansible-playbook --syntax-check валится на попытке расшифровать vault в одной из ролей. Подсовывать ему пароль от волта не хочу. Как скипнуть расшифровку волта?
Артём
Скипнув выполнение роли?
Timur
?
Не надо джинджу засовывать в таски
inqfen
Проблема в том, что результат уникальный на каждом хосте и нужно юзать hostvars[inventory_hostname]
inqfen
Так-то мне это и самому не нравится
Timur
Дайте исходные данные и скажите, что вы хотите получить на выходе
inqfen
есть переменные хоста, у каждого хоста есть переменная hostvars[inventory_hostname]['block_device_mappings']
inqfen
вот такого вида [{'device_name': 'xvda', 'ebs': {'attach_time': datetime.datetime(2019, 10, 8, 9, 45, 50, tzinfo=tzutc()), 'delete_on_termination': True, 'status': 'attached', 'volume_id': 'vol-06f377b2690e1e327'}}, {'device_name': '/dev/xvdb', 'ebs': {'attach_time': datetime.datetime(2019, 10, 8, 9, 45, 50, tzinfo=tzutc()), 'delete_on_termination': True, 'status': 'attached', 'volume_id': 'vol-0acf59c694765f138'}}]
inqfen
Нужно для каждого элемента в этом листе, если 'device_name' указан в маунтах - взять volume_id и составить словарь { volume_id: mount_point }
inqfen
сейчас оно в таком виде {%- set ebs_id_mounts = dict() -%} {%- for device, dir in mounts.items() -%} {%- for dev_map in hostvars[inventory_hostname]['block_device_mappings'] -%} {%- if device == dev_map['device_name'] -%} {%- set device_id = dev_map['ebs']['volume_id'] | replace ('-', '') -%} {{ ebs_id_mounts | combine({device_id: dir}) }} {%- endif -%} {%- endfor -%} {%- endfor -%} {{ ebs_id_mounts }}
inqfen
работает, но ebs_id_mounts где-то в строку превращается, смотрю wtf
Timur
Список волюмов амазоновских тачек пытаетесь получить?