Артём
Hello
Всем привет, есть простой для многих вопрос - как использовать where только для определенного типа файлов? конкретно интересует template, если тип файла .j2?
Hello
Сделал такое, но не работает, сильно прошу камнями не кидать
George
Не используйте темплейт для yaml, пожалуйста. Сделайте переменные в vars и запишите результат "|to_yaml". Иначе, потом, это очень трудно сопровождать.
Dmitry
Подскажите, а встроенной реакции на сигналы нет в ансибл? На TERM/INT в частности
Alex
George
Если в yaml используется jinja, то исчезает любая возможность его отладить, кроме как в середине runtime'а. Если делается что-то вида:
copy:
content: '{{ foo|to_yaml }}'
dest: /etc/foo.yaml
vars:
foo:
key1:
- elem1
- elem2, etc, то такое можно отлаживать на уровне переменных ансибл, а не в районе подсчёта пробелов во вложенном цикле.
Hello
George
Без скипов не получится. А так - register и в when регэксп по имени. Выглядит тяжко, я бы так делать не стал. И не только из-за skip'ов. Вдруг, там посторонний файл, к ансиблу не относящийся?
Sergey
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
Это особенность синтакс чек? Иначе ошибки в упор не вижу
Sergey
Lamobot
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
ребя, а как красиво проверить наличие всех переменных необходимых для успешного завершения плейбука?
Alex
Alex
[IPT] Dmitry
[IPT] Dmitry
я вот что-то типа такого хочу
- fail: msg="Bailing out. this play requires 'bar'"
when: bar is not defined
Vladislav
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
Alex
Anonymous
Спасибо
checkdiff
Есть варианты?
xml модуль, словари, plain text, блочная jinja, full text jinja и комбинации
Artem
ребят поскажите пожалуйста как будет выглядеть переменная в которой содержится inventory hostname из конкретной хост группы в инвентори ?
Ждун
так же как и любая другая переменная
brestows
Ребят, подскажите, есть какой-то модуль который позволяет распарсить ini файл на удаленной машине ?
Alex
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[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }} что то вроде такого?
Vladislav 👻
никак, ансибл не разделяет разные инвентори, когда указывается 2+ инвентори, он их просто сливает в один сплошной инвентори
Vladislav 👻
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
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
Maksim
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 хосты, а не группы