Александр
Получается как заголовок первого уровня. и далее заголовки второго уровня
inqfen
Когда ансибл читает плейбук, он должен хоть куда-то подцепиться, на локалхост или удаленно
Vladimir
Возникла проблема)) Есть контейнер (williamyeh/ansible:centos7) в нем запускается плейбек. На 2х из 3х серверов из инвентори плейбук выполняется, на 3ем же проблема с подключением по ssh. Однако на хост-машине и в контейнере ssh подключение создается. В какую сторону копать.
На всякий случай отладка
debug1: Next authentication method: publickey
debug1: Offering RSA public key: .ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Offering RSA public key: /builds/*****/******/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Vladimir
Возникла проблема)) Есть контейнер (williamyeh/ansible:centos7) в нем запускается плейбек. На 2х из 3х серверов из инвентори плейбук выполняется, на 3ем же проблема с подключением по ssh. Однако на хост-машине и в контейнере ssh подключение создается. В какую сторону копать.
На всякий случай отладка
debug1: Next authentication method: publickey
debug1: Offering RSA public key: .ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Offering RSA public key: /builds/*****/******/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Ни кто не сталкивался с таким/подобным поведением?
Vladimir
Короч, трабла с ключами, хотя не понятно какая... Аутентификация на логин/пароль работает
Vladimir
Artëm
Да
Alexey
Добрый день! Извините за нубский вопрос... Подскажите плиз как оформить в один таск код вида:
- name: Copy private key
copy:
src: ssl/private.key
dest: /etc/nginx/ssl/ccc.com.key
when: ansible_facts['os_family'] == "Debian"
- name: Copy private key
copy:
src: ssl/private.key
dest: /usr/local/etc/nginx/ssl/ccc.com.key
when: ansible_facts['os_family'] == "FreeBSD"
matt
никак
Alexey
никак
так же уродливый плейбук получится...
matt
так не используйте фрибсд
Alexey
Sergey
Timur
Alexey
Timur
Как пример:
- name: Load a variable file based on the OS
include_vars: '{{ platform }}'
with_first_found:
- '{{ ansible_os_family }}.yml'
- default.yml
loop_control:
loop_var: platform
Alexey
Этот вариант лучше )
Timur
В директории vars будут лежать файлы вида Debian.yml, FreeBSD.yml и т.п. со своим набором переменных
Alexey
Timur
В зависимости от определенной OS ансибл будет подхватывать нужный набор переменных
Timur
Если нужного набора не встретится, будет использоваться набор из default.yml
Oleg
комрадз, выполняю shell и как сделать что бы при отрицательном рез-те выполнение плэйбука стопалось?
Oleg
failed_when: почему то не остонавливает
Timur
Oleg
failed_when
shell: /sbin/sysctl net.ipv4.conf.all.forwarding | awk '{ print $3 }'
register: sysctl_result
failed_when: "sysctl_result == 0"
Oleg
там или 0 или 1, при 0 должно стопнуться, но он пролетает как будто все норм
Timur
Кавычки убираем
Timur
И там не саму переменную нужно вызывать
Timur
Добавьте дебаг вида:
- debug:
var: sysctl_result
Oleg
а что?
Timur
И покажите, что он выводит у вас
Oleg
Добавьте дебаг вида:
- debug:
var: sysctl_result
"sysctl_result": {
11:35:21 "changed": true,
11:35:21 "cmd": "/sbin/sysctl net.ipv4.conf.all.forwarding | awk '{ print $3 }'",
11:35:21 "delta": "0:00:00.009452",
11:35:21 "end": "2019-01-18 08:35:20.961875",
11:35:21 "failed": false,
11:35:21 "rc": 0,
11:35:21 "start": "2019-01-18 08:35:20.952423",
11:35:21 "stderr": "",
11:35:21 "stderr_lines": [],
11:35:21 "stdout": "0",
11:35:21 "stdout_lines": [
11:35:21 "0"
Timur
Понятно
Timur
У вас в коде должно быть так:
failed_when: not sysctl_result.rc
Timur
Проверьте
Oleg
Timur
Работает?
Timur
Oleg
Какая?
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "/sbin/sysctl net.ipv4.conf.all.forwarding | awk '{ print $3 }'", "delta": "0:00:00.009553", "end": "2019-01-18 09:10:17.279295", "failed_when_result": true, "rc": 0, "start": "2019-01-18 09:10:17.269742", "stderr": "", "stderr_lines": [], "stdout": "1", "stdout_lines": ["1"]}
Timur
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "/sbin/sysctl net.ipv4.conf.all.forwarding | awk '{ print $3 }'", "delta": "0:00:00.009553", "end": "2019-01-18 09:10:17.279295", "failed_when_result": true, "rc": 0, "start": "2019-01-18 09:10:17.269742", "stderr": "", "stderr_lines": [], "stdout": "1", "stdout_lines": ["1"]}
Ну, так все как и должно быть
Timur
Результат rc = 0
Timur
По условию это фейл
Timur
>там или 0 или 1, при 0 должно стопнуться
вот как было в начальном условии
Timur
Все так и есть. При 0 все останавливается
Timur
Что не так-то?
Oleg
но у меня сейчас 1, и все равно падает на ошибку
Timur
Выхлоп покажите
Timur
А, понял
Timur
Вы не в rc результат выводите, который отслеживать хотите, а в stdout?
Oleg
вроде да, я еще только начинающий)
Oleg
shell: /sbin/sysctl net.ipv4.conf.all.forwarding | awk '{ print $3 }'
register: sysctl_result
failed_when: sysctl_result.stdout == 0
если так делаю, то в любом случае без ошибок проходит) хотя должно опять же на 0 стопаться
Timur
А так?
failed_when: not sysctl_result.stdout
Aleksei
Коллеги, а кто-нибудь знает как вытащить из playbook'а параметр hosts?
Пишу роль для кластера rabbitmq. В конфиге надо указывать все хосты, которые участвуют в кластере. Пока реализовал через ansible_play_hosts, но если запускать ansible-playbook с параметром —limit, то мы теряем хосты из конфига rabbitmq
Пока решил проблему так:
---
- name: Install and confugure RabbitMQ
hosts: "{{ rabbitmq_cluster_group }}"
become: yes
vars:
rabbitmq_cluster_group: dev-rabbitmq
И работаю уже с переменной rabbitmq_cluster_group
Timur
Aleksei
Или нельзя... Вот поэтому и вопрос =)
Timur
Все можно. Непонятно, что именно вы хотите?
Timur
Опишите задачу детальнее
Timur
Что такое "значение hosts" в вашем понимании?
Timur
И как сейчас инвентори у вас выглядит?
Timur
Если в группу dev-rabbitmq входят все нужные хосты, то в чем вообще проблема?
Timur
Что мешает использовать эту группу напрямую?
Timur
Вот так почему не сделать просто?
{% for host in groups['dev-rabbitmq'] %}
cluster_formation.classic_config.nodes.{{ loop.index }} = rabbit@{{ hostvars[host].inventory_hostname }}
{% endfor %}
Timur
И плейбуку вызывать аналогично:
---
- name: Install and confugure RabbitMQ
hosts: dev-rabbitmq
become: yes
vars:
rabbitmq_server_cluster: True
rabbitmq_server_cluster_type: classic_config
roles:
- software.rabbitmq
Timur
Так, и?
Aleksei
Так, и?
Поэтому в шаблоне генерации конфига целесообразнее использовать переменную
Aleksei
Чтобы меняя имя группы в переменной мы могли использовать роль для разных групп
Timur
Timur
Не проще сделать разные файлы: dev, test и preprod c одинаковыми названиями группы rabbitmq?
Timur
И выбор делать - подкладывая нужный инвентарь в плей
Timur
Тогда даже в плейбуке ничего менять не нужно будет, и в темплейтах все будет постоянным
Aleksei