𝕀𝕘𝕠𝕣
https://docs.ansible.com/ansible/2.7/user_guide/become.html
спасибо, эту уже бегло листал
Timur
В режиме дебага можно увидеть ключи, с которыми запускается ssh сессия и питоновские модули
Timur
Но что делает сам питон, там не увидишь - только результат в виде output и error
Timur
Если интересно, как работает модуль systemd, то можно посмотреть в код
Timur
https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/system/systemd.py
𝕀𝕘𝕠𝕣
спасибо!
bebebe
ansible осень настала
Sasha
Проитерироваться по чему-нибудь типа users: - username: jane keys: | Key1 Key2 - username: john keys: | Key3 Key4
я не могу разобраться как именно итерирование написать. получается что надо по пользователям идти, с этим ок authorized_key: user = {{ item.username }} state = present key = "{{ lookup('fileglob', 'files/public_keys/*').split(',') }}" with_items: '{{users}}' в вот эта часть key = "{{ lookup('fileglob', 'files/public_keys/*').split(',') }}" пока не работает. да, тут просто все клчи из папки пробую добавить пока что
Sasha
допустим. а как решить задачу?
Timur
допустим. а как решить задачу?
Рекомендую глянуть вот эту статью по лупам: https://chromatichq.com/blog/untangling-ansible-loops
Timur
Там хорошо и на примерах разные способы циклов разобраны
⚓️Damir
Это неважно. Там изначально неправильно все делается :)
Вроде норм, если fileglob возвращает строку
Timur
Аргументу нужна строка в виде ключа
Timur
А не список файлов :)
Timur
Но это, если ключ один на пользователя и с таким же именем
⚓️Damir
А не список файлов :)
Ну вот, я действительно не правильно догадывался о том как работает fileglob
Timur
Можно много ключей в одном файле
Да, можно, если все ключи юзера засунуты в один файл с тем же именем
Sasha
authorized_key: user: '{{ item }}' key: '{{ lookup('file', 'files/public_keys/'+item }}' with_items: "{{ users }}" Наверно как то так, если ключи будут в файле, а в списке только имена пользователец
там сложнее. есть папка с отдельными ключами. для разных пользовтелей разный набор ключей должен быть вроде такого --- users: - username: alice use_sudo: yes public_keys: ['a', 'b', 'c'] - username: bob use_sudo: no public_keys: ['b', 'c'] - username: carol use_sudo: yes public_keys: ['c'] а в files/public_keys/ лежат три ключа a, b и с
Sasha
да, да, статья хорошая, как раз смотрю
⚓️Damir
Наверно нужно with_subelements: - "{{ users }}" - key_files А список такой: users: - username: user1 key_files: - a - b Имя файлов будут в item.1 Имена пользователей в item.0.username
Timur
Посмотрите ещё вариант with_nested
⚓️Damir
Посмотрите ещё вариант with_nested
Там наверно нельзя в качестве второго списка передать результат из первого
Joe
нет. тэг нужно поставить таске downloading_binary и с ним запускать плейбук
Достаточно было протэгировать main.yml и все заработало благодарочка
Timur
А ключи можно доставать с помощью lookup из полученного имени файла
⚓️Damir
Но я бы просто запихал сами ключи в переменные и вообще не смотрел бы в файлы
Sasha
для каждого пользователя повторять все ключи текстом ? или другая идея?
⚓️Damir
users: - username: user1 key_files: - '{{ a }}' - '{{ b }}' Например так
Sasha
спасибо за идею
⚓️Damir
Или так что бы цикл был проще users: - username: jane keys: | {{ Key1 }} {{ Key2 }} - username: john keys: | {{ Key1 }} {{ Key3 }}
Vladislav 👻
да, давал суду на рестарт сервисов, на хосте sudo systemctl restart от юзера отрабатывает
Вы выдали права повышения до рута на mgr в рамках рестарта сервиса
𝕀𝕘𝕠𝕣
Вы выдали права повышения до рута на mgr в рамках рестарта сервиса
какой вариант, не назначая дополнительных прав через модуль системд запустить?
Vladislav 👻
Надо документацию почитать, но вроде вариант либо идете под рутом в ансибле, либо костыль через комманд
Vladislav 👻
И что? Хотите сказать, что рут не смог?
𝕀𝕘𝕠𝕣
Говорю же прошел, но рута по ссш передавать не хочу
Vladislav 👻
😳
Timur
Идёте по ссш под обычным пользователем, а там уже просто повышаете привилегии до рута
Timur
Только на время выполнения задачи
Nklya
Джефф тоже решил быть в тренде)) https://leanpub.com/ansible-for-kubernetes
Vadim
Кстати, никто не думает съездить в феврале на CfgMgmtCamp?
Alex
https://www.serverlab.ca/tutorials/dev-ops/automation/using-hashicorp-vault-with-ansible-jinja2-templates/ Это конечно круто, но там не описано, что если по указанному пути в хаши валт нет данных, чтобы ансибл создал и положил их туда. Тогда миграции между стендами(тест - прод) пройдут плавнее. Ещё вопрос как создавать закрытый ключ с паролем для каждого хоста и класть эти данные в хаши валт, а потом забирать их оттуда для подключения к хостам?
bebebe
--- - name: load ldap contacts shell: > ldapsearch -D "{{ ldap.bind.dn }}" -w "{{ ldap.bind.password }}" -o ldif-wrap=no -LL -b "{{ ldap.search_base }}" -H "ldap://{{ ldap.server }}" | sed -r 's/([^:]+)::? (.*)/"\1":"\2",/' | awk 'BEGIN {printf("{\n")} {printf("%s\n", ($0 == "") ? "\"\":\"\"}{" : $0 )}' | jq -s '.' register: ldap_user - name: templating contacts template: src: templates/nagios-config/contacts.cfg.j2 dest: "{{ artifact_dir }}/contacts.cfg"
bebebe
просто оставлю это здесь
Nklya
красиво, но однострочники на питоне все же веселее
Timur
sed вместе с awk - дурдом
Victor
grep'а не хватает
bebebe
вот сегодня надо было отдебажить, наткнулся
Andrey
я бы в этот код поместил коммент с примером вывода ldapsearch и примером выхлопа awk
Andrey
хотя код читается и понятен, чтобы быть уверенным в его правильности нужно знать желаемое поведение
bebebe
в коде проблемы не было, была проблема в людях :/ это из разряда, написал и забыл.
bebebe
я бы в этот код поместил коммент с примером вывода ldapsearch и примером выхлопа awk
да, а в целом хорошая практика да, оставлять примеры output'а обычно делаю это в commit мессаджах, и благополучно забываю
bebebe
я тогда еще удивился, что в 21веке нету конверторов из ldap output'а во что-то структурирование yaml/json/etc были странные поделия на python/ruby которые работали мягко говоря странно
bebebe
даже вот такое помню пробовал https://github.com/quinot/ansible-plugin-lookup_ldap
bebebe
или подобное, но к сожалению толи инструменты были не очень, толи не понял как их правильно запилить под свою задачу tldr они не подошли.
bebebe
пробовал запилить на чистом jq - тоже не осилил, в jq можно писать что-то своего map reduce но написать на map-reducre конвертацию из ldapdiff в json тоже не осилил.
Joe
Подскажите как правильно передать значения VARS в playbook c ролями https://telegra.ph/mongodb-install-10-26
Joe
- role: mongodb_install mongo_version: - 3.4.9 tags: - installbin - addsudouser Методом тыка вот так
Павел П.
Добрый! не подскажите, какой best practice получить список хостов где не прошел пинг? Ручками пропарсить вывод этой ad-hoc команды в лог ?
Денис
в конфиге включаются
Денис
а если надо перед плейбуком проверить какие хосты доступны, есть wait_for_connection, например