Андрей
Вот тут кстати интересный момент
Farukh
У меня по этой причине вначале тоже модули отсутствовали
Андрей
Я хочу заюзать 'laps_password' lookup плагин. И он под капотом использует /usr/libexec/platform-python
Farukh
Попробуйте поставить debug и вывести
platform.python_version
Никита
перед модулем ldap надо libldap2-dev поставить
Андрей
Андрей
Farukh
а pip какая версия?
Андрей
pip3.6
Андрей
9.0.3
Роман
Коллеги, я хочу плейбук по крону на локалхосте выполнять. Вручную запускаю - всё работает. Проблема в том, что в случае крона отсутствуют переменные, типа ansible_env, и отладить не могу (ибо tty отсутствует). Пишет: dict object' has no attribute 'USER'
dict object - это ansible_env
Lamobot
Sergey
Sergey
Ну и не надо так, да. Есть же systemd.timer
Роман
Решит ли это проблему.
Sergey
но оффтоп жи
Роман
но оффтоп жи
Да. Блин. Так и есть). Без ансибла выглядит проще и логичнее.
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
Sergey
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
в доке пример - один уровень тэкгс и - имя тега
Sergey
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
Sergey
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
]
]
}
но не то, нужен один список []
Lamobot
Пока так:
- 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
]
]
}
но не то, нужен один список []
https://pastebin.com/b5iS0ZMC
Anonymous
Всем добрый день, кто может подсказать каким образом можно запустить скрипт задетаченным, что бы ansible не ждал завершения выполнения скрипта, а шел дальше
- name: Execute the script
shell: ./docker/deploy_containers.sh &
retries: 10
delay: 3
async: 1200
poll: 60
Lamobot
Lamobot
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 раза, так как прописан в трёх группах.
Lamobot
А можно ещё обеспечить только уникальные значения?
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 раза, так как прописан в трёх группах.
https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#set-theory-filters
Vitaliy
вот я ... открыта же дока, и не нашел сразу.
Спасибо
#Rλatan
https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/filter/core.py
документация порой бывает не полной в Ансибл она вообще запутанная, я обычно в сорцах смотрю, так хоть понятно что фильтры делают
Tadeusz
Антон
Pavel
Vladislav B
Доброго времени суток. Есть решение в ансибле по управлению несколькими vCenter'ами? Например есть пачка вм размазанных по нескольким вцентрам, хочу снять снапшоты. Если ансибл не видит вм на первом вцентре, то подключается ко второму и там ищет... Ну или как-то так
Vladislav B
При единичном вцентре всё ок. А вот как задействовать остальные вот тут загадка
#Rλatan
username
Ну или with_items
username
Но не проще ли сначала опросить вценты и узнать где именно она?
Vladislav B
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
*хендлер