ℭ𝔞𝔯𝔯𝔬𝔩
ℭ𝔞𝔯𝔯𝔬𝔩
Посмотрю, если логи остались, щас пока не до этого.
есть старый тикет про это:
https://github.com/ansible/ansible/issues/18184
в конец недавно кто-то дописал такое:
> The workaround is to use hashing filters (hash, password_hash, md5 ...) in your playbook https://docs.ansible.com/ansible/2.4/playbooks_filters.html#hashing-filters
> Here is an example:
> My playbook look like this:
- hosts: jug
gather_facts: no
vars_files:
- vars/cred.yml
tasks:
- name: Input Test
shell: printf "{{ dba_user }}\n{{ dba_passwd | hash('sha1') }}\n{{ dba_sid }}" | ./input_script.sh
args:
chdir: /home/tbemnta/data/scripts/
> When I run it in verbose mode, password is hashed:
$ ansible-playbook -vvv -i inventory-ng/hosts/hosts --ask-vault-pass ansible/yaml/input_06112018.yml
Alexander
Ну хеши это понятно.
В общем, баг. Буду знать, спасибо.
Sergey
🤦♂️
Mik
Asten
Asten
Осталось только написать run_my_ansible_playbook.sh
Vlad
Странные люди. Почему они не передают пароли через environment?
జ్ఞా
Братцы! Удаленного дево-пса ищет кто? есть ресурсы рускоязычные чтобы найти халтуру по ансиблю ? Дайте проектик потренироваться - да поотлаживать
Alexey
Кто ж в здравом уме даст проектик комуто "тренироваться"?
Alexey
Хотя смотря сколько ты готов за это платить..
జ్ఞా
Это из какого фильма ?
ℭ𝔞𝔯𝔯𝔬𝔩
Sergey
Stefan
а есть какой-то ресурс по практическим задачам на самообучение по ансиблу?
simplemice.eth
виртуалки + таски?
Павел П.
Добрый день)
То ли глаз замылился, то ли не пойму.
Делаю прямо по примеру в
https://docs.ansible.com/ansible/2.7/modules/authorized_key_module.html
Получаю ошибку
ERROR! 'with_file' is not a valid attribute for a Play
ansible 2.4.3.0
python version = 2.7.13
Плейбук:
Павел П.
Artem
with_items
shine
мб with_items ?
loop, по-моему, с 2.5
Artem
или key: {{ file }}
Павел П.
with_items
ERROR! 'authorized_key' is not a valid attribute for a Play
Павел П.
В общем по версиям проверить? Ок...
Павел П.
simplemice.eth
таски на гитхабе
Stefan
Александр
’’’
- name: nginx direcories
file:
path: "{{ nginx_dir }}/{{ item }}"
state: directory
loop: "{{ [ lookup('filetree', 'nginx/') ] | json_query('[]') | json_query('[?state==`directory`].path') }}"
tags:
- nginx_update_configs
- name: install nginx configs
template:
src: "../files/nginx/{{ item }}"
dest: "{{ nginx_dir }}/{{ item }}"
loop: "{{ [ lookup('filetree', 'nginx/') ] | json_query('[]') | json_query('[?state!=`directory`].path') }}"
notify:
- reload nginx
tags:
- nginx_update_configs
’’’
Павел П.
Александр
Рассмотрим подробнее
loop - то же самое, что и with_items
lookup('filetree', 'nginx/') - возвращает массив (в терминологии python и jinja - лист) словарей с файлами и каталогами с некоторыми характеристиками
[ lookup(...) ] - обёрнут в квадратные скобки на случай если он вернёт один объект как голый словарь, чтобы в итоге он был все же массивом
json_query('[]') - возвращает один массив данных, на случай если у нас массив вложен в массив (если мы изначально получили от lookup массив - у нас будет что-то вроде [[ data ]])
[?state!=`directory`] - делает выборку массива словарей, по свойству state (Если это не каталог)
.path - возвращает как массив path всех элементов
Павел П.
круть!
Очень спасибо за подробноту!
Timur
Александр
Можно проще. Но вывод ansible-playbook -CD будет более грязным
Александр
Будет отображаться содержимое item и пропущенные по условию
Timur
Кавычек не хватает у путей к файлам просто
Александр
Посмотрю. Спасибо
Павел П.
Timur
Александр
не. это не ответ
Timur
Или речь о том, чтобы создавать каталоги и копировать файлы в одном модуле?
Timur
Это же принципиально разные задачи
Александр
ок. Глупый вопрос...
Александр
Регулировать отображение можно с помощью loop_control и label
- name: nginx direcories
file:
path: "{{ nginx_dir }}/{{ item.path }}"
state: directory
with_filetree: nginx
loop_control:
label: "{{ item.path }}"
when: item.state == "directory"
если я сделаю что-то подобное, у меня же всё равно будут отображаться skip'ы по условию when: item.state == "directory"
Александр
- name: nginx direcories
file:
path: "{{ nginx_dir }}/{{ item }}"
state: directory
loop: "{{ [ lookup('filetree', 'nginx/') ] | json_query('[]') | json_query('[?state==`directory`].path') }}"
мне вернёт только директории и только path заодно
ℭ𝔞𝔯𝔯𝔬𝔩
Jinja2 в двойных кавычках же
Ну и with_items если "{{ item }}"
Timur
Александр
это хорошо что в данном случае три файла. А если их штук 20 и примерно столько же каталогов, плюс ещё diff'ы - выхлоп получится очень грязным
Александр
В ansible.cfg вроде как есть опция отключить ВСЕ skip'ы, но боюсь это не мой случай. В нашем случае, во многих местах они несут информативность
Vladislav 👻
Александр
Александр
и это без diff'ов
Александр
emergy@MacBook-Pro-Emergy:~$ find tmp1
tmp1
tmp1/empty_dir
tmp1/one_directory
tmp1/one_directory/one_dir
tmp1/one_file
tmp1/one_file/one_file
tmp1/two_directories
tmp1/two_directories/directory_1
tmp1/two_directories/directory_2
tmp1/two_files
tmp1/two_files/file_1
tmp1/two_files/file_2
Александр
В общем, каждый сам себе художник...
Timur
То же самое. Можно сделать find а потом копи по найденному
Александр
это ещё больше операций + delegate_to
Timur
Чего? При чем тут delegate вообще?
Александр
ну чтобы сделать find, я как понимаю через delegate_to... каталог то локальный
Александр
ну или local_action, что в принципе одно и то же
Timur
Ну и в чем проблема?
Александр
да не в чём. Меня лично lookup filetree с двумя фильтрами больше устраивает
Александр
можно в принципе оптимизировать до одного json_query - когда нибудь и до этого руки дойдут
Александр
казалось бы очевидный json_query('[][?state==`directory`].path'), работает только в js версии. У ансиБоли как обычно свои взгляды...
kbks
приветы
kbks
немного старнный вопрос, но все же.
Скажем, у меня есть несколько dict в которых есть разные значения,
к примеру
app:
v2:
v3:
v5:
Есть таски которые разворачивают на хостах app соответствующих версий, какой нибудь командой из сгенерированного тимплейта( к примеру run template_v2 для версии v2 соответственно). приложение может выдавать статус запущенных версий.
Вопрос: как можно описать в ансибле удаление уже запущенных версий, но которые удалены из дикта (v1, v4) в данном случае.
Victor
немного старнный вопрос, но все же.
Скажем, у меня есть несколько dict в которых есть разные значения,
к примеру
app:
v2:
v3:
v5:
Есть таски которые разворачивают на хостах app соответствующих версий, какой нибудь командой из сгенерированного тимплейта( к примеру run template_v2 для версии v2 соответственно). приложение может выдавать статус запущенных версий.
Вопрос: как можно описать в ансибле удаление уже запущенных версий, но которые удалены из дикта (v1, v4) в данном случае.
Ну, для общего случая, могу порекомендовать только шелломагию. Берем шелл, узнаем что запущено/есть/лежит, смотрим чего из этого нет в конфигах-словарях, удаляем.
kbks
ну это тоже в голову приходило, но думал может есть какой-то более гуманный вариант)
Victor
есть более гуманные варианты
Victor
Но типо у тебя есть приложение с управлением через команду.
Самый гуманный вариант - взять готовый модуль под эту приложуху.
Менее гуманный вариант - написать модуль под эту приложуху.
Другой случай - у тебя приложуха использует conf.d, соотвественно можно просто от туда выкинуть все ненужные файлы потипу https://gist.github.com/gMagicScott/618d7ac29b12664d7482 только генерить список налету.
Другой вариант - писать с помощью assemble весь конфиг в один файл.
Victor
Victor
https://docs.ansible.com/ansible/2.7/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable
Stefan
Для play и для role можно объявлять свои переменные
ну мне получается нужно чтоб было как-то так
sites:
- name: bla bla
caching: true
- name: install packages
apt: name={{ item }} state=present
with_items:
- htop
- wget
- curl
- name: create vhosts
template: src=templates/vhost.conf dest=/etc/nginx/conf.d/{{ item.name }}.conf
with_items: "{{ sites }}"
Stefan
и чтоб оно всё в одной плоскости это хавало