Андрей
Вот тут кстати интересный момент
Farukh
У меня по этой причине вначале тоже модули отсутствовали
Андрей
Я хочу заюзать 'laps_password' lookup плагин. И он под капотом использует /usr/libexec/platform-python
Farukh
Попробуйте поставить debug и вывести platform.python_version
Никита
перед модулем ldap надо libldap2-dev поставить
Андрей
Андрей
Farukh
а pip какая версия?
Андрей
pip3.6
Андрей
9.0.3
Андрей
перед модулем ldap надо libldap2-dev поставить
У меня CentOS, тут это openldap-devel. Ну соотв он установлен
Роман
Коллеги, я хочу плейбук по крону на локалхосте выполнять. Вручную запускаю - всё работает. Проблема в том, что в случае крона отсутствуют переменные, типа ansible_env, и отладить не могу (ибо tty отсутствует). Пишет: dict object' has no attribute 'USER' dict object - это ansible_env
Роман
А как в кроне выполняете?
* */2 * * * ansible-playbook entrypoint.yml
Lamobot
* */2 * * * ansible-playbook entrypoint.yml
Попробуйте через bash -c 'ansible-playbook entrypoint.yml'
Роман
Попробуйте через bash -c 'ansible-playbook entrypoint.yml'
Так тоже не работает. Я ещё пробовал в шеллскрипт это вставить. Но тоже нет.
Lamobot
Так тоже не работает. Я ещё пробовал в шеллскрипт это вставить. Но тоже нет.
man 5 crontab Похоже ему не хватает каких-то переменных окружения. Или может PATH
Sergey
Ну и не надо так, да. Есть же systemd.timer
Роман
Ну и не надо так, да. Есть же systemd.timer
Я сейчас переделываю за уволившегося коллегу, мне таймеры тоже больше нравятся.
Роман
Решит ли это проблему.
Sergey
Я сейчас переделываю за уволившегося коллегу, мне таймеры тоже больше нравятся.
systemd же по атймеру запустит другой юнит, в котором можно упороться и любой Environment указать
Sergey
но оффтоп жи
Роман
но оффтоп жи
Да. Блин. Так и есть). Без ансибла выглядит проще и логичнее.
Роман
Так нету не всего словаря, а конкретного ключа
{"msg": "lookup plugin (ansible_env) not found"}
Sergey
это он не нашёл плагин, а не словарь
Vitaliy
Парни, помогите решить задачку: Все системные переменные нужно указывать в одном файле переменных system.yml (для удобства) И необходимо задать переменную со списком tcp портов, которые будут далее прописываться в iptables. Хосты добавлены каждый в свои группы в inventory файле. как я понимаю, можно задать переменную в таком виде (пример): firewall_allowed_tcp_ports_for: postgres_cluster: - 5432 - 6432 - 8008 etcd_cluster: - 2379 - 2380 balancers: - 5000 - 5001 - 7000 Затем, в плэйбуке пр. для hosts: postgres_cluster указать vars: firewall_allowed_tcp_ports: "{{ firewall_allowed_tcp_ports_for[postgres_cluster] }}" Но в inventory могут указываться хосты как для каждой независимой группы (их три), но также возможна ситуация когда во всех группах по сути одни и те же хосты. Вот в этом случае (когда ставятся все компоненты на один сервер) нужно чтобы в переменную firewall_allowed_tcp_ports попали порты всех групп: "{{ firewall_allowed_tcp_ports_for[postgres_cluster] }}" "{{ firewall_allowed_tcp_ports_for[etcd_cluster] }}" "{{ firewall_allowed_tcp_ports_for[balancers] }}" Я пока не придумал как это правильно организовать.
Сделал динамическую переменную firewall_ports_dynamic_var. На основе членства в тех или иных группах, генерируется лист имён переменных, которые сопоставимы с переменными в system.yml Пример: vars: firewall_ports_dynamic_var: [] - set_fact: firewall_ports_dynamic_var: "{{ firewall_ports_dynamic_var }} + [ 'firewall_allowed_tcp_ports_for.{{ item }}' ]" loop: '{{ hostvars[inventory_hostname].group_names }}' результат, нужный список переменных, индивидуально для хоста, в зависимости от членства: TASK [debug] ************************************************************************************************************************************************************************************************* ok: [10.128.64.143] => { "firewall_ports_dynamic_var": [ "firewall_allowed_tcp_ports_for.balancers", "firewall_allowed_tcp_ports_for.etcd_cluster", "firewall_allowed_tcp_ports_for.postgres_cluster", "firewall_allowed_tcp_ports_for.replica" ] } Теперь вопрос, как правильно объеденить результат значений уже этих переменных?
Vitaliy
пока не победил
Dennis
Добрый день Никто не сталкивался с подобным ERROR! tags must be specified as a list
Dennis
cat ansible-roles/zabbix-glusterfs/tasks/01-tasks.yml - name: "Clone gstatus utility from GitHub repo to local server" - git: repo: git@github.com:gluster/gstatus.git dest: /opt tags: - gstatus
UglyKoyote
в доке пример - один уровень тэкгс и - имя тега
UglyKoyote
или разметка поехала?
UglyKoyote
вот вот, или разметка так поехала при копипасте что ничего непонятно стало
Sergey
"поехала" != "оносамозаменятиредобавило"
UglyKoyote
аа.. понял)
UglyKoyote
ансибл просто как 2 таски видит отдельные
Dennis
разметка поехада
Dennis
cat ansible-roles/zabbix-glusterfs/tasks/01-tasks.yml - name: "Clone gstatus utility from GitHub repo to local server" git: repo: git@github.com:gluster/gstatus.git dest: /opt tags: - gstatus
UglyKoyote
камон, я ж про пробел написал ) TASK [dummy : Clone gstatus utility from GitHub repo to local server] ********************************************************************************************************************************************* changed: [localhost] cat roles/dummy/tasks/main.yml - name: "Clone gstatus utility from GitHub repo to local server" git: repo: git@github.com:gluster/gstatus.git dest: /tmp/opt tags: - gstatus
UglyKoyote
у него пробелы лишние перед тегом
Sergey
точно жи
Sergey
пробел перед минусом - словарь. Ну такое, да
UglyKoyote
точно жи
угу. я заметил одно, но упустил то что увидел ты(
Sergey
ладно, победили же 😊
UglyKoyote
интересно, а линтер поймет это ил нет
Sergey
зависит
UglyKoyote
не не, я о другом, одна голова хорошо, а две лучше)
Dennis
в смысле?
Dennis
как надо то?
UglyKoyote
не, ты убирай пробелы и пробуй
UglyKoyote
мы просто линтер обсуждаем уже
Андрей
в атоме есть норм плагин: https://atom.io/packages/linter-ansible-linting
Vitaliy
Сделал динамическую переменную firewall_ports_dynamic_var. На основе членства в тех или иных группах, генерируется лист имён переменных, которые сопоставимы с переменными в system.yml Пример: vars: firewall_ports_dynamic_var: [] - set_fact: firewall_ports_dynamic_var: "{{ firewall_ports_dynamic_var }} + [ 'firewall_allowed_tcp_ports_for.{{ item }}' ]" loop: '{{ hostvars[inventory_hostname].group_names }}' результат, нужный список переменных, индивидуально для хоста, в зависимости от членства: TASK [debug] ************************************************************************************************************************************************************************************************* ok: [10.128.64.143] => { "firewall_ports_dynamic_var": [ "firewall_allowed_tcp_ports_for.balancers", "firewall_allowed_tcp_ports_for.etcd_cluster", "firewall_allowed_tcp_ports_for.postgres_cluster", "firewall_allowed_tcp_ports_for.replica" ] } Теперь вопрос, как правильно объеденить результат значений уже этих переменных?
Пока так: - set_fact: firewall_ports_dynamic_var: "{{ firewall_ports_dynamic_var|default([]) }} + [ 'firewall_allowed_tcp_ports_for.{{ item }}' ]" loop: '{{ hostvars[inventory_hostname].group_names }}' - set_fact: firewall_ports_list: "{{ firewall_ports_list|default([]) }} + [ {{ item }} ]" loop: '{{ firewall_ports_dynamic_var }}' Результат: TASK [debug] ************************************************************************************************************************************************************************************************* ok: [10.128.64.143] => { "[] + [ firewall_allowed_tcp_ports_for.balancers ] + [ firewall_allowed_tcp_ports_for.etcd_cluster ] + [ firewall_allowed_tcp_ports_for.postgres_cluster ] + [ firewall_allowed_tcp_ports_for.replica ]": [ [ "22", "5000", "5001", "5002", "5003", "7000" ], [ "22", "2379", "2380" ], [ "22", "5432", 6432, "8008" ], [ 33 ] ] } но не то, нужен один список []
Anonymous
Всем добрый день, кто может подсказать каким образом можно запустить скрипт задетаченным, что бы ansible не ждал завершения выполнения скрипта, а шел дальше - name: Execute the script shell: ./docker/deploy_containers.sh & retries: 10 delay: 3 async: 1200 poll: 60
Anonymous
благодарю за информацию
Vitaliy
https://pastebin.com/b5iS0ZMC
Красота, на много лучше, спасибо большое! Можно даже без объявления пустого списка, чтобы меньше строк... теперь только это: - set_fact: firewall_ports_dynamic_var: "{{ firewall_ports_dynamic_var |default([]) }} + {{ firewall_allowed_tcp_ports_for[item] }}" loop: '{{ hostvars[inventory_hostname].group_names }}'
Vitaliy
А можно ещё обеспечить только уникальные значения? TASK [debug] ************************************************************************************************************************************************************************************************* ok: [10.128.64.143] => { "firewall_ports_dynamic_var": [ "22", "5000", "5001", "5002", "5003", "7000", "22", "2379", "2380", "22", "5432", 6432, "8008", 33 ] } в этом примере, 22 порт перечислен 3 раза, так как прописан в трёх группах.
Vitaliy
вот я ... открыта же дока, и не нашел сразу. Спасибо
#Rλatan
https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/filter/core.py документация порой бывает не полной в Ансибл она вообще запутанная, я обычно в сорцах смотрю, так хоть понятно что фильтры делают
Pavel
За сорцы тоже плюсую, но у ансибла одна из самых вменяемых документаций
+ ещё и актуальная более-менее, учитывая скорость релизов
Vladislav B
Доброго времени суток. Есть решение в ансибле по управлению несколькими vCenter'ами? Например есть пачка вм размазанных по нескольким вцентрам, хочу снять снапшоты. Если ансибл не видит вм на первом вцентре, то подключается ко второму и там ищет... Ну или как-то так
Vladislav B
При единичном вцентре всё ок. А вот как задействовать остальные вот тут загадка
username
При единичном вцентре всё ок. А вот как задействовать остальные вот тут загадка
name: поиск на первом ..... register: result ignore_errors: True name: поиск на втором ...... when: result|failed
username
Ну или with_items
username
Но не проще ли сначала опросить вценты и узнать где именно она?
Vladislav B
Если не сильно затруднит
username
Можно пример?
- name: Gather all registered virtual machines vmware_vm_info: hostname: '{{ vcenter_hostname }}' username: '{{ vcenter_username }}' password: '{{ vcenter_password }}' delegate_to: localhost register: vminfo
username
грепаем результат и если есть искомое запускаем хэндоер
username
*хендлер