Oleg
Да у меня даже готовые плейбуки под это есть
заманчиво, хочу сам сначала попробовать разобраться...
manefesto
Ну вот тебе кусок темплейта для консула
manefesto
{ "datacenter": "{{datacenter}}", "data_dir": "/var/consul", "log_level": "INFO", "node_name": "{{inventory_hostname}}", "server": false, "encrypt": "{{consul_key}}", "enable_script_checks": true, "disable_update_check": true, "addresses": { "dns": "127.0.0.1", "https": "0.0.0.0", "grpc": "127.0.0.1", "http": "127.0.0.1" }, "bind_addr": "{{ansible_eth1.ipv4.address}}", "retry_join": [{% for host in groups['servers'] %} "{{ hostvars[host]["ansible_eth1"]['ipv4']['address'] }}" {% if not loop.last %},{% endif%} {% endfor %}], "ports": { "dns": 53 } }
manefesto
это если у тебя есть серая сеть на интерфейсе eth1
Oleg
спасибо всем) надо еще доку прочитать про variables
Oleg
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html здесь найду инфу?
Oleg
спасибо
Dmitriy
Всем привет. ЧТо то не могу сообразить, как поступить не используя башизм, мне нужно добавить в конфиг заббикса новый сервер (какие там серера прописаны мне неизвестно) при помощи ansible. Как правильно это сделать ?
Grek 🇺🇦
lineinfile
Dmitriy
lineinfile
смотрю доку и не могу понять как данный модуль правильно использовать в моей ситуации, предполагаю что нужно юзать с опцией regexp: '^Server:', а вот как указать "добаввь в конце такой ip" не пойму
manefesto
Есть вроде модуль для этого
Grek 🇺🇦
insertafter
Dmitriy
не совсем понимаю о чем вы, задача такая, есть сервера с уже установленным zabbix, надо к ним добавить еще один сервер
Dmitriy
insert_after
спасибо, только insertafter вроде бы параметр, увидел в доке
Dmitriy
insertafter
спасибо, попробую это
Dmitriy
я надеюсь что подобной задачи не будет более, поэтому хочется менее заморочно :) но спасибо
Dmitriy
подскажите, вот такая конструкция просто затирает строчку server - name: "Add new server".. lineinfile: path: /etc/zabbix/zabbix_agentd.conf regexp: '^{{ item.option }}' insertafter: '^{{ item.option }}' line: 10.35.215.42 with_items: - { option: 'Server=' } - { option: 'ServerActive=' }
Dmitriy
и вообще, лучше бы в конец добавить, последним сервером...
Grek 🇺🇦
разбей на 2 таска, и записывай line: Server=10.35.215.42 и line: ServerActive=10.35.215.42
Grek 🇺🇦
или в одном, но тогда line: "{{ item.option }}'10.35.215.42
Grek 🇺🇦
блин, наверное нет. покажи как ты хочешь чтоб выглядел конфиг
Dmitriy
или в одном, но тогда line: "{{ item.option }}'10.35.215.42
- name: "Add new server".. lineinfile: path: /etc/zabbix/zabbix_agentd.conf regexp: '^{{ item.option }}' insertafter: '^{{ item.option }}' line: '{{ item.option }}10.35.215.42' with_items: - { option: 'Server=' } - { option: 'ServerActive=' } истина где то рядом, вот так он меняет на новый параметр не сохраняя старый
Dmitriy
блин, наверное нет. покажи как ты хочешь чтоб выглядел конфиг
Текущий Server=10.35.215.41 ServerActive=10.35.215.41 Нужный Server=10.35.215.41, 10.35.215.42 ServerActive=10.35.215.41, 10.35.215.42
Grek 🇺🇦
надо чтоб он в 2х местах поменял?
Dmitriy
надо чтоб он в 2х местах поменял?
да, нужно чтоб он в 2х местах добавил мой сервер zabbix к уже настроенному zabbix-агенту
Grek 🇺🇦
аааа...ААААА, понял. так не сработает
Dmitriy
и как бы вы рекомендовали сделать ?
Dmitriy
конечно, *тьфу тьфу* всегда есть шелл, но это совсем плохой вариант
Grek 🇺🇦
я хз, сейчас читаю как накостылить. потому чтоэто не добавить строку в файл, а апенд к существующей строке, а это больно)
Alex
а есть ли какой то аналог default, но только для фильтров? Например, при сохранении в файл мне в 99,9% нужен to_nice_json, а в оставшихся 0.1% - кастомный
Отделение Bereke Bank
подскажите, вот такая конструкция просто затирает строчку server - name: "Add new server".. lineinfile: path: /etc/zabbix/zabbix_agentd.conf regexp: '^{{ item.option }}' insertafter: '^{{ item.option }}' line: 10.35.215.42 with_items: - { option: 'Server=' } - { option: 'ServerActive=' }
Создай темплейт и грузи файл по человечески. Потратишь пять минут на темплейт - сэкономишь кучу времени в будущем, избавив себя от ебли с lineinfile, blockinfile и прочим говном
Alex
не очень представляю как его использовать в моем случае
Alex
приведу пример, чтобы было понятно
Dmitriy
Создай темплейт и грузи файл по человечески. Потратишь пять минут на темплейт - сэкономишь кучу времени в будущем, избавив себя от ебли с lineinfile, blockinfile и прочим говном
дело в том, что изначально я не настраивал и не могу дать 100% гарантии что там все смотрит на один и тот же хост, поэтому и выбрал добавление как единственное на мой взгляд решение. Но я вас понял, если конфиг идентичен, то проще его слить, руками добавить нужный сервер, а потом разлить при помощи ansible
Alex
в роле report есть таск по сохранению содержимого в файл - name: Store tests result to a file delegate_to: localhost copy: content: "{{ log_result | to_nice_json }}" dest: "{{ test_result_file_name }}" как мне здесь убрать to_nice_json без необходимости его явно прописывать в 100500 местах в плейбуке?
Dmitriy
ну, хорошо, тогда пошел искать как ансиблом сравнивать конфиги на серверах )
Dmitriy
спасибо
Alex
в тех местах, в которых вызывается роль report
Alex
в роле report есть таск по сохранению содержимого в файл
Alex
при вызове роли я передаю в нее переменую log_result, в 99% мне нужен фильтр to_nice_json, но в редких случаях нужен другой фильтр
Alex
тогда не понятно как передавать кастомный фильтр
Grek 🇺🇦
через переменную же
Grek 🇺🇦
?
Alex
через переменную же
можно пример для параметра content увидеть
Alex
типа такого, но нет гибкости - name: Store test result delegate_to: localhost copy: content: >- {%- if content_filter | default('json') == 'json' -%} {{ log_result | to_nice_json }} {%- else -%} {{ log_result }} {%- endif -%} В блоке else хотелось бы иметь возможность использовать любой кастомный фильтр аля {%- else -%} {{ log_result | content_filter }}
Ivan
ребят, подскажите как написать when так, чтоб таска выполнялась если вот это выражение '{{ item | regex_search("\/\b[0-9]{1,3}") }}' дает пустой результат?
Vlad
not и выражение в скобках
Ivan
not и выражение в скобках
- name: make wrong ip list debug: msg: '{{ item }}' loop: "{{ ip_list }}" loop_control: label: "{{ item }}" when: not ( item | regex_search("\/\b[0-9]{1,3}") ) вот так делаю. и не работает(
Grek 🇺🇦
when: not {{ item | regex_search("\/\b[0-9]{1,3}") }}
Grek 🇺🇦
а, да...
Ivan
item|regex..|length == 0
и опять нет :(
Lamobot
и опять нет :(
Вопрос - а чего regex должен делать?
Lamobot
Даже вернее, что вы хотите этим регекспом сделать?
Ivan
Вопрос - а чего regex должен делать?
Я пишу тест. Чтоб он из списка айпишников проверял наличие префикса с метрикой
Lamobot
А как выглядит с метрикой и без?
Wilderone
ппц, что ансибл натворил в доке для latest с модулями
Vitalii
ппц, что ансибл натворил в доке для latest с модулями
См. Релиз нотсы к 2.10. Много всего перенесено в коллекции
Ivan
А как выглядит с метрикой и без?
TASK [test-verify-ip : DEBUG print ip_list (from previous task)] *************************************************************************************************************************** ok: [localhost] => { "msg": [ "192.168.0.1/32", "172.16.10.12/32", "192.168.0.1", "172.16.10.12" ] } TASK [test-verify-ip : DEBUG print each item in ip_list] *********************************************************************************************************************************** ok: [localhost] => (item=192.168.0.1/32) => { "msg": "/32" } ok: [localhost] => (item=172.16.10.12/32) => { "msg": "/32" } ok: [localhost] => (item=192.168.0.1) => { "msg": "" } ok: [localhost] => (item=172.16.10.12) => { "msg": "" }
Илья IT
Коллеги, привет! Помогите плиз решить вот какую задачку.... Нужно написать роль, которая нормально управляет раскаткой пользователей... Что имеем: файл users.yaml который в себе содержит список пользунов вида: users: - username: user1 - username: user2 Есть файлы с именем пользователя в названии user1.yaml и в них список хостов вида: access: - inventory_hostname: test_host11-1 Пилю плейбук такого вида: - name: add_users.yml 0. Include vars include_vars: ../vars/users.yml - name: add_users.yml 1. Include vars include_vars: ../vars/{{ item.username }}.yml with_items: "{{ users }}" - name: test1 set_fact: inventory_hostname="{{ item.inventory_hostname }}" with_items: - "{{ access }}" - name: test2 debug: var: inventory_hostname В итоге он мне выдает не то, что я хочу... Как правильно обработать цикл, чтоб он брал из списка пользователей имя первого, потом подставлял инвентори из списка этого пользователя, потом возвращался, брал имя второго пользователя и в переменную подставлял только его список хостов и так далее пока не дойдет до последнего... Помогайте, коллеги, я уже в растерянности...
Sergey
Коллеги, привет! Помогите плиз решить вот какую задачку.... Нужно написать роль, которая нормально управляет раскаткой пользователей... Что имеем: файл users.yaml который в себе содержит список пользунов вида: users: - username: user1 - username: user2 Есть файлы с именем пользователя в названии user1.yaml и в них список хостов вида: access: - inventory_hostname: test_host11-1 Пилю плейбук такого вида: - name: add_users.yml 0. Include vars include_vars: ../vars/users.yml - name: add_users.yml 1. Include vars include_vars: ../vars/{{ item.username }}.yml with_items: "{{ users }}" - name: test1 set_fact: inventory_hostname="{{ item.inventory_hostname }}" with_items: - "{{ access }}" - name: test2 debug: var: inventory_hostname В итоге он мне выдает не то, что я хочу... Как правильно обработать цикл, чтоб он брал из списка пользователей имя первого, потом подставлял инвентори из списка этого пользователя, потом возвращался, брал имя второго пользователя и в переменную подставлял только его список хостов и так далее пока не дойдет до последнего... Помогайте, коллеги, я уже в растерянности...
#LDAP сентября №2
Илья IT
#LDAP сентября №2
LDAP, Radius и прочее не вариант) FreeIPA и прочее тоже не катит)
Ivan
так а что именно не работает?
Вот я не могу сделать так чтоб у меня фильтровались результаты где в адресе не написана метрика
Илья IT
так а что именно не работает?
Ну собственно он берет только у последнего инвентори... Цикла не происходит... PLAY [all] ******************************************************************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************************************************* ok: [test_host21] ok: [test_host22] ok: [test_host11] TASK [add_users : add_users.yml 0. Include vars] ***************************************************************************************************************************************************************************************************************** ok: [test_host11] ok: [test_host21] ok: [test_host22] TASK [add_users : add_users.yml 1. Include vars] ***************************************************************************************************************************************************************************************************************** ok: [test_host11] => (item={'username': 'user1'}) ok: [test_host22] => (item={'username': 'user1'}) ok: [test_host21] => (item={'username': 'user1'}) ok: [test_host22] => (item={'username': 'user2'}) ok: [test_host21] => (item={'username': 'user2'}) ok: [test_host11] => (item={'username': 'user2'}) TASK [add_users : test1] ***************************************************************************************************************************************************************************************************************************************** ok: [test_host11] => (item={'inventory_hostname': 'test_host11-2'}) ok: [test_host21] => (item={'inventory_hostname': 'test_host11-2'}) ok: [test_host22] => (item={'inventory_hostname': 'test_host11-2'}) TASK [add_users : test2] ***************************************************************************************************************************************************************************************************************************************** ok: [test_host11] => inventory_hostname: test_host11-2 ok: [test_host21] => inventory_hostname: test_host11-2 ok: [test_host22] => inventory_hostname: test_host11-2 PLAY RECAP ******************************************************************************************************************************************************************************************************************************************************* test_host11 : ok=5 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 test_host21 : ok=5 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 test_host22 : ok=5 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Lamobot
ну {1,3} тогда
Ivan
ну {1,3} тогда
>> ребят, подскажите как написать when так, чтоб таска выполнялась если вот это выражение '{{ item | regex_search("\/\b[0-9]{1,3}") }}' дает пустой результат? Вроде так и есть)
Alex
у меня все отрабатывает - debug: msg="{{ item }}" loop: "{{ ip_list }}" when: not item | regex_search('\/[0-9]{1,3}')
Alex
на выходе получаю один элемент TASK [debug] *** ok: [localhost] => (item=10.0.0.1) => msg: 10.0.0.1
Илья IT
как удалять пользователей будете?
Просто проставляя state: absent