Станислав
в инвентори прописан юзер1 и его ключ. на хосте еще нет УЗ user1, но есть root и его ключ
Станислав
как таске сказать, чтобы использовал УЗ root
Станислав
remote_user
а как ключ ему подсунуть тогда?
Valiy
а как ключ ему подсунуть тогда?
-u root --private-key и путь к файлу с ключом
Станислав
-u root --private-key и путь к файлу с ключом
это вариант ad-hoc команды. а в таске как?
Valiy
это вариант ad-hoc команды. а в таске как?
в параметрах при запуске ansible-playbook
Станислав
а в дальнейшем тогда, как первичную УЗ юзер1 использовать
Fire
а в дальнейшем тогда, как первичную УЗ юзер1 использовать
Можешь в конфиге ansible прописать, или в playbook
Valiy
а в дальнейшем тогда, как первичную УЗ юзер1 использовать
можешь при запуске каждый раз указывать, можешь в конфиге указать (ansible.cfg)
Станислав
Можешь в конфиге ansible прописать, или в playbook
как вариант, это два раза через set_fact определять УЗ
Fire
можешь при запуске каждый раз указывать, можешь в конфиге указать (ansible.cfg)
Можно в инвентори для каждого хоста уникального юзера) Но зачем?
Станислав
ну смотря какая задача
Есть таска - name: Ensuring ansible user is actual user: name: ansible groups: wheel password: '{{ users.ansible.pass }}' create_home: yes shell: /bin/bash - name: Ensuring 'ansible_user' user authorized_keys is present authorized_key: user: '{{ ansible_user }}' key: '{{ ssh_pub_keys }}' Ее надо запустить от УЗ root
Станислав
ну да. перед началом основного таска
Андрей
run once
Valiy
ну да. перед началом основного таска
Если тебе один раз надо добавить юзера и дальше пользоваться уже созданным юзером, то запусти ansible-playbook с параметрами -u —private-key как я написал выше. Если тебе периодически нужно будет( например на новых хостах) запускать эти таски от рута, то укажи имя юзера прям в плейбуке
Станислав
remote_user не подходит в таком виде. Ему же надо еще как-то указать ключ для подключения. А вот это я и не нашел
Станислав
да. но ключ прописан для УЗ, которой еще нет. И если я подставлю УЗ и ключ root, то потом надо будет под другую УЗ переделывать?
Denis
Добрый день Подскажите, как правильно итерироваться по такому списку с вложенностью? blue_pools: - app.gslb.example.com: - app.example.com-blue-dc1 - app.example.com-blue-dc2 - api.gslb.example.com: - api.example.com-blue-dc1 - api.example.com-blue-dc2
Denis
В таске должно получится, что-то типо такого: - name: Debug vars debug: msg: "Pool: {{ item }}, site_pool: {{ item }}, State: enable" loop: "{{ blue_pools }}"
Denis
Про dict и subelements знаю, но не хочу пихать это в dict
Станислав
Хорошо. но потом доступ по ssh зарубится для рута. И так нельзя сделать: - name: Adding ansible user to docker group user: name: '{{ remote_user }}' groups: docker append: yes Т.к. remote_user он не знает, а ansible_user у него root
Sergey
Про dict и subelements знаю, но не хочу пихать это в dict
Ты же уже запихал это в dict, у тебя классическая свалка типа "list of dicts".
Станислав
а там дальше будет апдейт sshd конфига. где доступ руту рубят
Станислав
там роль идет на подготовку системы: УЗ, конфиги системы, ПО
Станислав
тут я не спорю
Vladislav 👻
Кто-нибудь в курсе, почему хеш для одного и того же пароля постоянно меняется? {{ var_password | password_hash('sha512') }}
Vladislav 👻
один и тот же
Vladislav 👻
Станислав
ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"
Vladislav 👻
соли разные?
рандом соль в ансибл бай дефолт?
Vladislav 👻
и самое веселое, непонятно, но haproxy это понимает как-то в basic auth...
Vladislav 👻
а как тогда haproxy понимает это без знания соли?
Vladislav 👻
или соль присутствует в хеше?
Vladislav 👻
Да, разобрался, соль в хеше, между знаками доллара
Vladislav 👻
странная логика...
Vladislav 👻
AlexD
странная логика...
в чем странная ?
Vladislav 👻
соль в самом хеше
Vladislav 👻
хотя наверно понедельник утро, поэтому могу негодовать просто так 😬
AlexD
соль в самом хеше
она не в хеше, а рядом в той же строке записи. Индивидуальный salt для каждой записи более секурно нежели один общий для всех записей.
Vladislav 👻
все правильно, но с точки зрения ansible и пароля для haproxy, нужно это фиксировать, ибо идемпотентность
Vladislav 👻
можно разную соль для разных приложений, но когда ты катаешь конфиг для haproxy, делать релоад его из-за новой соли - глупо...
Vladislav 👻
можно заранее захешить, да, но тоже выгляждит глупо, на фоне того, что все для этого и так есть в ansible
AlexD
можно заранее захешить, да, но тоже выгляждит глупо, на фоне того, что все для этого и так есть в ansible
у меня идея хранения и обработки пароля в plain text вызывает некоторый cringe. Лучше хранить сразу в шифрованном виде и вне ansible.
Vladislav 👻
vault никто не отменял
Anonymous
Коллеги, можете рассказать - а как вы vault используете ? Что я хочу - чтобы файл с переменными автоматически подцеплялся во все плейбуки я сделал vars/vault.yml, в котором зашифровал переменные но он применяется только, если явно указываю в плейбуке vars_files как сделать, чтобы он автоматом применялся ко всем переменным ?
Anonymous
Положить его в group_vars/all/
не понял вот смотри у меня сейчас шированный файл выглядит так: cat vars/vault.yml $ANSIBLE_VAULT;1.1;AES256 38* я хочу, чтобы у меня там были шифрованные переменные: srv-t-cibms1-password: * srv-t-cibms1-apikey: * как это сделать ?
Anonymous
хотя бы какие ключевые слова читать.
Anonymous
ansible-vault edit vars/vault.yml
Там переменные заданы. Вопрос - как доставить внутрь плейбука. Выше советовали group_vars, но я не понимаю, как их туда перенести зашифрованнымт
Aleksandr
гайз, а на хапрокси какую плейбуку лучше взять? с поддержкой acl
Valiy
Там переменные заданы. Вопрос - как доставить внутрь плейбука. Выше советовали group_vars, но я не понимаю, как их туда перенести зашифрованнымт
положи туда,где плейбук подцепит этот файл . Разницы что обычный файл с переменными, что с зашифрованными нет. Ансибл сам увидит что файл зашифрован и будет ругаться что не указан пароль. при запуске плейбука добавляешь параметр --ask-vault-pass , спрашивает пароль, вводишь и всё. Ансибл расшифрует файл и возьмёт оттуда переменные.
Vladislav 👻
Частенько быват глобальные переменные (прокси, ссл или еще что), тогда мы vault файл кладем в группу all, а в нужном месте ссылаемся на эти переменные.
Anonymous
очень похоже, что я банально запутался :) куда лучше положить vault.yaml, чтобы в плейбуке не писать vars_files ?
Lamobot
очень похоже, что я банально запутался :) куда лучше положить vault.yaml, чтобы в плейбуке не писать vars_files ?
А откуда берутся переменные в плейбуке? Вот туда и нужно положить, в host_vars или group_vars
Lamobot
Или зашифровать в vars: самого плейбука по одной
Anonymous
правильно понимаю, что я должен в group_vars/all добавить блок $ANSIBLE_VAULT;1.1;AES256 38*всё_содержимое_файлика.
Lamobot
Если хочешь в all добавлять, то нужно по одной переменной шифровать
Lamobot
https://docs.ansible.com/ansible/latest/user_guide/vault.html#creating-encrypted-variables
Max
А как в ansible можно заменить факт? Прст установить факт не могу, надо менять конкретный. Собсно суть в чём: linux mint заявляет о себе как: $ lsb_release -a No LSB modules are available. Distributor ID: LinuxMint Description: Linux Mint 19.3 Tricia Release: 19.3 Codename: tricia роль написана без учёта такого бреда, с ориентировкой на ванильную убунту, которая заявляет о себе вот так: $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic по причине того, что у меня в парке есть несколько машин со старой ОС (linux mint 18, который на ubuntu 16.04 основан), прст сделать set_fact может поломаться на этих старых ОС. поэтому надо менять только конкретный факт. как придумать некое условие в установке фактов? или надо как-то в полуавтоматическом режиме собирать факты, на основе собранных фактов делать нужный inventory с машинами на нужной ОС и дальше всем set_fact?
Lamobot
А как в ansible можно заменить факт? Прст установить факт не могу, надо менять конкретный. Собсно суть в чём: linux mint заявляет о себе как: $ lsb_release -a No LSB modules are available. Distributor ID: LinuxMint Description: Linux Mint 19.3 Tricia Release: 19.3 Codename: tricia роль написана без учёта такого бреда, с ориентировкой на ванильную убунту, которая заявляет о себе вот так: $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic по причине того, что у меня в парке есть несколько машин со старой ОС (linux mint 18, который на ubuntu 16.04 основан), прст сделать set_fact может поломаться на этих старых ОС. поэтому надо менять только конкретный факт. как придумать некое условие в установке фактов? или надо как-то в полуавтоматическом режиме собирать факты, на основе собранных фактов делать нужный inventory с машинами на нужной ОС и дальше всем set_fact?
Может лучше роль поменять, чтобы она работала и там и там?
Max
роль приезжает из пакета из репозитория (роль freeipa). не хотелось бы в такое лезть руками. p.s. понятно, что надо выпилить этот минт нафиг, но нет возможности