Артём
Hello
Всем привет, есть простой для многих вопрос - как использовать where только для определенного типа файлов? конкретно интересует template, если тип файла .j2?
Hello
Сделал такое, но не работает, сильно прошу камнями не кидать
George
Не используйте темплейт для yaml, пожалуйста. Сделайте переменные в vars и запишите результат "|to_yaml". Иначе, потом, это очень трудно сопровождать.
Dmitry
Подскажите, а встроенной реакции на сигналы нет в ансибл? На TERM/INT в частности
George
Если в yaml используется jinja, то исчезает любая возможность его отладить, кроме как в середине runtime'а. Если делается что-то вида: copy: content: '{{ foo|to_yaml }}' dest: /etc/foo.yaml vars: foo: key1: - elem1 - elem2, etc, то такое можно отлаживать на уровне переменных ансибл, а не в районе подсчёта пробелов во вложенном цикле.
George
Без скипов не получится. А так - register и в when регэксп по имени. Выглядит тяжко, я бы так делать не стал. И не только из-за skip'ов. Вдруг, там посторонний файл, к ансиблу не относящийся?
Maksim
Привет! Прогоняю этот блок через —syntax-check --- - name: common-objects vars: default_opts: &default_opts body_format: json return_content: yes follow_redirects: all validate_certs: no public_headers: &public_headers Content-Type: application/json X-Tenant: public tenant_headers: &tenant_headers Content-Type: application/json X-Tenant: tenant uri: url: http://{{ url }}/api/tenant-admin/common-objects method: POST status_code: 202 <<: *default_opts register: http_code tags: - schema Какая то неожиданная проблема с register. ERROR! 'register' is not a valid attribute for a Play
Maksim
Это особенность синтакс чек? Иначе ошибки в упор не вижу
Andrii
всем привет, а можно как-то побороть, что бы файл скачивался через basic auth сразу, а не через некоторое время, делаю так - name: Download get_url: url: http://test.ru/dump.sql.gz dest: /opt/dump/dump.sql.gz username: ansible password: 'secret' и в логах ip - - [12/Feb/2020:12:10:50 +0300] "GET /dump.sql.gz HTTP/1.1" 401 179 "-" "ansible-httpget" "-" ip - ansible [12/Feb/2020:12:16:08 +0300] "GET /dump.sql.gz HTTP/1.1" 200 9996596328 "-" "ansible-httpget" "-" и почему такая задержка в 5 минут?
[IPT] Dmitry
ребя, а как красиво проверить наличие всех переменных необходимых для успешного завершения плейбука?
[IPT] Dmitry
[IPT] Dmitry
я вот что-то типа такого хочу - fail: msg="Bailing out. this play requires 'bar'" when: bar is not defined
Vladislav
Тут наверно найдешь полезное
Andrii
надо было добавить force_basic_auth: yes
[IPT] Dmitry
Тут наверно найдешь полезное
да, интересно, спасибо
Vladislav
да, интересно, спасибо
https://www.shellhacks.com/ru/ansible-when-variable-is-defined-exists-empty-true/
Anonymous
Коллеги, подскажите как сделатьч то то подобное {% if (stand_type != "prod") OR (stand_type != "uat") %} - IS_BACKEND_MOCKING_ALLOWED=1 {% endif %}
checkdiff
А кто как конфиги xml'ные собирает? Например для clickhouse
Ivan
Есть варианты?
Мне дали j2, так и делаю
Anonymous
Спасибо
checkdiff
Есть варианты?
xml модуль, словари, plain text, блочная jinja, full text jinja и комбинации
Artem
ребят поскажите пожалуйста как будет выглядеть переменная в которой содержится inventory hostname из конкретной хост группы в инвентори ?
Ждун
так же как и любая другая переменная
brestows
Ребят, подскажите, есть какой-то модуль который позволяет распарсить ini файл на удаленной машине ?
brestows
парсит локальный ) например запускаю так:
brestows
ansible-playbook -i '192.168.5.5,' migrate.yml
brestows
парсит на моем компе
Alex
делай slurp и вперед
brestows
brestows
делай slurp и вперед
делаю вот так: - debug: msg="value key is {{ lookup('ini', 'key section=general file={{ ini_file.content | b64decode }}') }}" получаю ошибку: too many values to unpack
manefesto
делаю роль для консула И возник вопрос, мне надо взять все хосты из группы servers и сгенерить start_join: ["1.1.1.1","2.2.2.2","3.3.3.3"] Пока смотрю такой вариант {% for host in groups['servers'] %} "{{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}", {% endfor %} Но понимаю что у меня будет лишняя запятая в конце
manefesto
не подскажите как быть?
citius
{% if not loop.last %},{% endif%}
manefesto
Мерси
citius
а лучше возьми https://galaxy.ansible.com/brianshumate/consul
citius
прекрасная роль, не стоит свой изобретать велосипед
manefesto
Я верю что она прекрасна =)
Artem
Ребят как обратится к переменной inventory hostname когда playbook выполняется для разных групп хостов ?
Vladislav 👻
так же, как и для одной группы хостов?
Vladislav 👻
hostvars[<host>]
Vladislav 👻
начнутся проблемы, если есть одинаковые хосты в группах
Artem
hostvars[<host>]
А как для группы будет выглядеть ?
Artem
{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }} что то вроде такого?
Vladislav 👻
никак, ансибл не разделяет разные инвентори, когда указывается 2+ инвентори, он их просто сливает в один сплошной инвентори
Artem
Да
Vladislav 👻
типа такого тогда, да
Artem
Если детально то пожйбук выполняется в контексте локал хоста
Vladislav 👻
у меня есть вот такой пример в темплейте: {% for h in groups[am.target_group] %} - "{{ hostvars[h]['ansible_host'] }}:{{ am.target_port }}" {% endfor %}
Artem
Точнее модуль требует
hamper 𓅝
А в модуле iptables есть возможность chain создавать если его нет?
Artëm
Коллеги, в ansible при использовании nested loop так и нельзя использовать переменную из одного списка в качестве второго списка(или условия для цикла)?
Artëm
Я про вариант без использования заинклюженного файла с таском
Maksimus Ulibikus
Всем привет. Каким тегом в телеграме отобразить код?
Maksimus Ulibikus
fff
Dr. L.S.Dee
Всем привет. Каким тегом в телеграме отобразить код?
Моноширинным. В ходе набора можно использовать backticks: два бэктика `выделяют` строку. ```шесть бэктиков выделяют блок.```
Maksimus Ulibikus
1. На сервере с Ansible создал пользователя lnxcfg, затем под ним ssh-keygen. 2. Под lnxcfg создал плейбук 1 --- 2 - hosts: webservers 3 become: true 4 remote_user: root 5 tasks: 6 7 - name: Add the user 'lnxcfg' with a bash shell, appending the group 'wheel' to the user's groups 8 user: 9 name: lnxcfg 10 password: $6$zKcouqlG$UwKPnYfgE.A1VJGgFJ4JFTsGK84M9fKT/ 11 shell: /bin/bash 12 groups: wheel 13 append: yes 14 15 - name: Create a 2048-bit SSH key for user lnxcfg in ~lnxcfg/.ssh/id_rsa 16 user: 17 name: lnxcfg 18 generate_ssh_key: yes 19 ssh_key_bits: 2048 20 ssh_key_file: .ssh/id_rsa 21 22 - name: Set authorized key taken from file 23 authorized_key: 24 user: lnxcfg 25 state: present 26 key: "{{ lookup('file', '/home/lnxcfg/.ssh/id_rsa.pub') }}" 3. Запускаю плейбук ansible-playbook useradd.yml --ask-pass. ВСЁ ОК. 4. Пробую подключиться на сервер, на котором применился этот плейбук ssh lnxcfg@server. ТОЖЕ ВСЁ ОТЛИЧНО. 5. На сервере с Ansible, не меняя плейбук, снова запускаю ansible-playbook useradd.yml, но уже без --ask-pass и получаю ошибку: fatal: [94.130.xx.xx]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}Почему SSH не пропускает Ansible, но пропускает, если делаю ssh lnxcfg@server?
Dariy
1. На сервере с Ansible создал пользователя lnxcfg, затем под ним ssh-keygen. 2. Под lnxcfg создал плейбук 1 --- 2 - hosts: webservers 3 become: true 4 remote_user: root 5 tasks: 6 7 - name: Add the user 'lnxcfg' with a bash shell, appending the group 'wheel' to the user's groups 8 user: 9 name: lnxcfg 10 password: $6$zKcouqlG$UwKPnYfgE.A1VJGgFJ4JFTsGK84M9fKT/ 11 shell: /bin/bash 12 groups: wheel 13 append: yes 14 15 - name: Create a 2048-bit SSH key for user lnxcfg in ~lnxcfg/.ssh/id_rsa 16 user: 17 name: lnxcfg 18 generate_ssh_key: yes 19 ssh_key_bits: 2048 20 ssh_key_file: .ssh/id_rsa 21 22 - name: Set authorized key taken from file 23 authorized_key: 24 user: lnxcfg 25 state: present 26 key: "{{ lookup('file', '/home/lnxcfg/.ssh/id_rsa.pub') }}" 3. Запускаю плейбук ansible-playbook useradd.yml --ask-pass. ВСЁ ОК. 4. Пробую подключиться на сервер, на котором применился этот плейбук ssh lnxcfg@server. ТОЖЕ ВСЁ ОТЛИЧНО. 5. На сервере с Ansible, не меняя плейбук, снова запускаю ansible-playbook useradd.yml, но уже без --ask-pass и получаю ошибку: fatal: [94.130.xx.xx]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}Почему SSH не пропускает Ansible, но пропускает, если делаю ssh lnxcfg@server?
Очень похожая проблема здесь: https://stackoverflow.com/questions/33280244/ssh-error-permission-denied-publickey-password-in-ansible
Maksimus Ulibikus
Очень похожая проблема здесь: https://stackoverflow.com/questions/33280244/ssh-error-permission-denied-publickey-password-in-ansible
Спасибо за наводку. Пока сделал так в файле hosts 94.130.xx.xx ansible_ssh_user=lnxcfg ansible_sudo_pass=111111
Maksimus Ulibikus
ansible_ssh* помоему deprecated
Может быть, но работает и без warning
Artem
всем, привет пытаюсь запустить: - hosts: some-dc1.ex.loc gather_facts: no tasks: - name: Create windows domain group for SSH users win_domain_group: name: "{{ hostvars['discount_api'].inventory_hostname }}_ssh" scope: global path: OU=Linux allow SSH connect,OU=Groups,DC=ex,DC=loc в итоге ansible падает в ошибку The task includes an option with an undefined variable. The error was: \"hostvars['discount_api']\" is undefined\n\nThe error appears to be in что не так не делаю?(
Vladislav 👻
Переменная не определена... Что за discount_api хост?
Artem
группа
Artem
пытаюсь дернуть переменную iventory_hostname с группы discount_api в инвентори, где то с синтаксисом промазал по ходу
Vladislav 👻
Группы в groupvars
Artem
добавить в смысле или есть ли в group_vars?
Vladislav 👻
В смысле в hostvars хосты, а не группы