Iwan
Всем привет, знаю не по правилам спрашивать такое. Нормально ли будет сделать деплой с помощью ансибла который будет запускать docker-compose?
Андрей
а почему нет?
Iwan
а почему нет?
Спрашиваю потому, что мало примеров в инете поэтому поводу..
Отделение Bereke Bank
Всем привет, знаю не по правилам спрашивать такое. Нормально ли будет сделать деплой с помощью ансибла который будет запускать docker-compose?
Если не ошибаюсь можно вообще выкинуть композ и все описать докер модулями. Писанины больше, но зато по феншую
Отделение Bereke Bank
через модуль Docker получается всё делать?
А там оказывается есть отдельный модуль для docker_comose
Iwan
А там оказывается есть отдельный модуль для docker_comose
да, вот и хотелось бы узнать. мб кто-нибудь сталкивался с подобной задачей.. или всё ещё поддерживает у себя такое )
Sergey
@tnt4brain так что там насчет имени хоста при делегировании?
Если я корректно читаю исходники, то тебя интересует переменная ansible_delegated_host (https://github.com/ansible/ansible/blob/devel/lib/ansible/executor/task_executor.py#L779)
Гайрат
А при делегировании, как то можно узнать реальное имя хоста, на котором в данный момент выполняется таск?
https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html#delegated-facts Там есть пример с группами, но скорее всего тебе нужна директива delegated_facts
Gordon
Кто-нибудь сталкивался с таким?
Sergey
кириллица? 😃
Gordon
кириллица? 😃
Вроде бы её нет)
Gordon
Вот по такой конструкции : copy: src={{ var-path-1 }}/{{ item.file }} dest={{ item.dest }} mode=0777 with_items: - { file: ‘file-1’, dest: ‘path-1’ }
Андрей
mode:0777 - прям вот бэстпрактис и безопасностью запахло))
Gordon
Ахах)) да я ради забавы поменял )
Gordon
В этом примере только такой мод ))
Gordon
Разобрался, почему-то не находит файлы (( хотя путь корректный
Gordon
Вот по такой конструкции : copy: src={{ var-path-1 }}/{{ item.file }} dest={{ item.dest }} mode=0777 with_items: - { file: ‘file-1’, dest: ‘path-1’ }
Ну всё, кажется совсем разобрался, вот эти одиночные кавычки ' ' были лишними здесь
Sergey
Вот по такой конструкции : copy: src={{ var-path-1 }}/{{ item.file }} dest={{ item.dest }} mode=0777 with_items: - { file: ‘file-1’, dest: ‘path-1’ }
Лучше сразу отучайся писать через знак равенства, тогда и проблем будет намного меньше потом.
Sergey
Пиши нормальный YaML.
Gordon
Лучше сразу отучайся писать через знак равенства, тогда и проблем будет намного меньше потом.
Да, сейчас уже переписал именно через ":" сейчас всё работает, там ещё в одном имени файла опечатка была, все исправил)
Gordon
👍 респект
Спасибо)
Alex
Если я корректно читаю исходники, то тебя интересует переменная ansible_delegated_host (https://github.com/ansible/ansible/blob/devel/lib/ansible/executor/task_executor.py#L779)
The task includes an option with an undefined variable. The error was: 'ansible_delegated_host' is undefined не знает оно такой переменной
Sergey
Подскажите плиз, пытаюсь использовать ansible inventory plugin aws_ec2, но вместо информации об инстансах указанного в .yml региона получаю список инстансов региона который задан по умолчанию в aws configure. Мне нужно несколько профилей под каждый регион создавать или я что то неверно понимаю? Или как второй вариант, инвентори модуль игнорируется и плейбук работает с дефолтными значениями из окружения. Т.к фильтр по машинам работает только внутри задач, а не на уровне инвентори, что странно
tutunak
ansible.cfg как то так настроен [defaults] # Use the YAML callback plugin. stdout_callback = yaml # Use the stdout_callback when running ad-hoc commands. bin_ansible_callbacks = True roles_path = ./roles/ display_skipped_hosts = yes gather_timeout=20 inventory = aws_ec2.yml retry_files_enabled = False command_warnings=False callback_whitelist = profile_tasks, timer, yaml log_path=ansible.log [inventory] enable_plugins = aws_ec2
Vitaly
Так, а в чем вопрос то?
Alex
А что нужно?
при делегировании иметь возможность получить имя хоста, на котором выполняется таск
tutunak
👍
завелось?
Lamobot
при делегировании иметь возможность получить имя хоста, на котором выполняется таск
Это какой хост? Который в delegate_to ? Или на котором выполняется сам таск?
Lamobot
И используется ли delegate_facts ?
Sergey
при делегировании иметь возможность получить имя хоста, на котором выполняется таск
The ansible_host variable (ansible_ssh_host in 1.x or specific to ssh/paramiko plugins) reflects the host a task is delegated to.
Sergey
Почистил.
Lamobot
The ansible_host variable (ansible_ssh_host in 1.x or specific to ssh/paramiko plugins) reflects the host a task is delegated to.
Почему при этом ansible_hostname показывает хост с которого вызывается делегированный таск, а не тот, который в delegated_to?
Sergey
Ты же внимательно прочитал?
Sergey
ansible_hostname vs ansible_host
Alex
Это какой хост? Который в delegate_to ? Или на котором выполняется сам таск?
delegate_facts не использую - name: master delegate_to: app_master setup: - name: master delegate_to: app_master debug: msg="ansible_hostname={{ ansible_hostname }}" - name: master delegate_to: app_master debug: msg="ansible_host={{ ansible_host }}" - name: slave facts delegate_to: app_slave setup: - name: slave delegate_to: app_slave debug: msg="ansible_hostname={{ ansible_hostname }}" - name: slave delegate_to: app_slave debug: msg="ansible_host={{ ansible_host }}" вроде правильно отрабатывает
Alex
получаю TASK [master] *** ok: [127.0.0.1 -> 35.205.xxx.xxx] => msg: ansible_hostname=itests-e0f3-master TASK [master] *** ok: [127.0.0.1 -> 35.205.xxx.xxx] => msg: ansible_host=35.205.xxx.xxx TASK [slave facts] *** ok: [127.0.0.1 -> 35.203.xxx.xxx] TASK [slave] *** ok: [127.0.0.1 -> 35.203.xxx.xxx] => msg: ansible_hostname=itests-e0f3-slave TASK [slave] *** ok: [127.0.0.1 -> 35.203.xxx.xxx] => msg: ansible_host=35.203.xxx.xxx
Aleksey
Всем привет, подскажите как правильно обвернуть команду command: docker exec {{ mongo_container_name }} mongo meteor --eval "rs.initiate({ id: 'rs0', members: [ { id: 0, host: 'localhost:27017' } ]})" как правильно экранировать в этой команде
Sergey
Используешь инструмент неподобающим образом.
Sebor▂▅▇█▓▒░
и снова башсибл
Sergey
Всем привет, подскажите как правильно обвернуть команду command: docker exec {{ mongo_container_name }} mongo meteor --eval "rs.initiate({ id: 'rs0', members: [ { id: 0, host: 'localhost:27017' } ]})" как правильно экранировать в этой команде
Но шутки тебя же не остановят, да? Итак. ты хочешь странного. Если хочешь вызвать шаблонизатор где-то в строке, то заключай в двойные кавычки её всю, а если хочешь, чтобы при этом внутри этой строки были двойные кавычки, то их нужно экранировать. А теперь пойду помою руки.
Oleksandr
как это не существует? :) - https://docs.ansible.com/ansible/latest/modules/docker_container_module.html
Gordon
Друзья, кажется нашел аномалию, скрипт выполненный от рута через ансибл модуль и аналогично локально на машине, приводит к разным результатам.. просто как так (((
Gordon
Т.е. shell: bash install.sh и непосредственно в терминале sudo bash install.sh это 2 разных результата
Oleg
проверь разницу между переменными среды окружения
Anton
env
Gordon
а где разница должна быть, одна и та же машина .. один и тот же юзер ?
Oleg
а где разница должна быть, одна и та же машина .. один и тот же юзер ?
например интерактивная оболочка выполняет ~/.bashrc ~/.bash_profile, ансибл нет
Oleg
И это никак не исправляется?)
если скрипт требует каких-то специфических переменных, частый пример http_proxy, это предусматривается в плейбуке
Oleg
Как это можно в самом скрипте проверить?
я тут вангую и фантазирую. а у тебя есть скрипт который не так работает в разных обстоятельствах. добавь в него env > /tmp/env-`date +%s ` и сравни файлы /tmp/env-* которые будут в выводе.
Gordon
я тут вангую и фантазирую. а у тебя есть скрипт который не так работает в разных обстоятельствах. добавь в него env > /tmp/env-`date +%s ` и сравни файлы /tmp/env-* которые будут в выводе.
Придумал, а может кто знает где такие случаи уже разбирались? вот бы мне ссылку на такой ресурс, пока что не могу понять с двух env, чего там не хватает
Ivan
Парни, я извиняюсь, но тупой вопрос, который я никак не могу решить. Пытаюсь использовать iptables_raw, но таски не хотят выполняться. Ошибка: ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path. - name: Head iptables rules ^ here Роль: - hosts: all become: yes roles: - ome.iptables_raw - common # << firewall here - cloudalchemy.node-exporter Таска: - name: Head iptables rules iptables_raw: state: '{{ (firewall_head_rules != "" ) | ternary("present", "absent") }}' name: head weight: 10 keep_unmanaged: '{{ firewall_keep_unmanaged }}' rules: '{{ firewall_head_rules }}'
Gordon
В общем PATH у меня одинаковый, но вот что нашел по этой проблеме
Gordon
Sergey
Кто то использует aws_ec2 inventory plugin? Не могу понять почему игнорируется инвентори при запуске, всегда лезет искать регион в конфиге, а не в инвентори, попробовал закомментировать строчку с регионом в конфиге - и в таске и в инвентори пытаюсь сделать запрос к региону, ансибл ругается что регион не задан О _о причем ansible-inventory проверяя инвентори верно отображает данные, а с плейбуками игнорируется что так plugin: aws_ec2 regions: - ap-northeast-2 filters: "tag:Name": что так - name: get instance info ec2_instance_info: region: ap-northeast-2 filters: availability-zone: ap-northeast-2a instance-state-name: [ "running"]
Aleksandr
Господа, а кто-нибудь уже решал задачу с фаерволом и докером запущенным на хосте? а то решение рестартовать сервис докера после применения правил фаервола, такое себе
Yury
Я пишу их в DOCKER-USER с указанием внешнего интерфейса. Вроде норм работает)
Ivan
Мысли на тему https://unrouted.io/2017/08/15/docker-firewall/
Gordon
ребята, а как-то pwd можно передать ансиблу? Т.е. чтобы запуск происходил из pwd определённой директории