Ждун
ребята, если есть менеджмент машинка, куда все заходят для запуска ansible playbooks, в какой директории лучше всего хранить эти shared playbooks? (вопрос скорее по юниксам а не по ансиблю)
inqfen
В коде и заупскать раннером
inqfen
И не хранить на машине
Radik
а ещё вопрос а с тимсити+ансибл как быть?
Radik
плагинов нет, как оказалось просто с какой-либо ансибл тачки запускать плейбуки?
Tadeusz
а ещё вопрос а с тимсити+ансибл как быть?
врапперы, дядя) git clone && ...
Tadeusz
да, стучи
inqfen
Отдел КГБ закрыт на ремонт, просьба стучать по телефону
inqfen
нет в коде - нет в проде
Sergey
Denis 災 nobody
2 года - не срок )
Max
Приветствую! Подскажите, как в ансибле выполнить команду на удаленном сервере, в параметрах которой есть переменная окружения, прописанная в ~/.bashrc (это файл на удаленном сервере)? В .bashrc прописано: export MY_VAR=42 Пытаюсь сделать таск: - name: get an env vaiable from ~/.bashrc shell: ". /root/.bashrc && echo $MY_VAR" args: executable: /bin/bash register: res - debug: msg="{{ res.stdout }}" - debug: msg="{{ res.stderr }}" Но срабатывает, не выводится значение MY_VAR
inqfen
а смотреть на какие-то переменные на удаленной машине в bashrc это вообще путь в пропасть
Sergey
^^^ +++
Max
Ты хочешь странного - не надо так.
ну как это не надо. Задача именно такая. Есть много удаленных серверов. На них в /root/.bashrc прописана некая переменаня. И на этих серверах надо выполнять команду типа some_command $MY_VAR. На локальном сервере у меня этих данных $MY_VAR нет, они именно в .bashrc на удаленных серверах прописаны
Dmitry
ну как это не надо. Задача именно такая. Есть много удаленных серверов. На них в /root/.bashrc прописана некая переменаня. И на этих серверах надо выполнять команду типа some_command $MY_VAR. На локальном сервере у меня этих данных $MY_VAR нет, они именно в .bashrc на удаленных серверах прописаны
Ну просто когда внедряют ansible - задача конечно состоит в том, чтобы максимально подстроить роли под текущую инфраструктуру (без странного), но конкретно этот кейс нужно решать тем, что собрать эти данные с серверов и переложить под контроль ansible
Max
Ты хочешь странного - не надо так.
Если бы я с нуля все эти сервера делал бы, я бы так конечно не поступил бы. Но сервера уже есть, в них все уже давно работает, и я там изменить ничего не смогу.
Andrii
всем привет, подскажите где ошибка? через gitlab-ci запускаю playbook, но мне ругается ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path. The error appears to have been in '/builds/my/repo/provision/roles/test/tasks/main.yml': line 50, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: Create and start services ^ here 50 строка это - name: Create and start services docker_compose: project_src: /root/deploy/test register: output если запускаю в ручную эту роль, то ошибки нет
Andrii
я ж на удаленной виртуалке запускаю
Andrii
но ошибка сразу выскакивает, даже не делает никаких действий ansible-playbook -i hosts -e "CI_REGISTRY=${CI_REGISTRY} CI_BUILD_TOKEN=${CI_BUILD_TOKEN}" -vvv test.yml ansible-playbook 2.7.10 config file = None configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.7/site-packages/ansible executable location = /usr/local/bin/ansible-playbook python version = 3.7.3 (default, Apr 10 2019, 01:29:41) [GCC 8.3.0] No config file found; using defaults /builds/my/repo/provision/hosts did not meet host_list requirements, check plugin documentation if this is unexpected /builds/my/repo/provision/hosts did not meet script requirements, check plugin documentation if this is unexpected Parsed /builds/my/repo/provision/hosts inventory source with ini plugin ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path. The error appears to have been in '/builds/my/repo/provision/roles/stands/tasks/main.yml': line 50, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: Create and start services ^ here
Sergei
да на синтаксис он ругается, я был не прав по началу, по-хорошему видеть весь мейн
Andrii
да на синтаксис он ругается, я был не прав по началу, по-хорошему видеть весь мейн
хм, а чего он не ругается, если я локально запускаю ? ansible-playbook -i hosts -e "CI_REGISTRY=${CI_REGISTRY} CI_BUILD_TOKEN=${CI_BUILD_TOKEN}" -vvv test.yml
Sergei
а что по версиям на удалённом сервере? требования к модулю видел?
Artem
но ошибка сразу выскакивает, даже не делает никаких действий ansible-playbook -i hosts -e "CI_REGISTRY=${CI_REGISTRY} CI_BUILD_TOKEN=${CI_BUILD_TOKEN}" -vvv test.yml ansible-playbook 2.7.10 config file = None configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.7/site-packages/ansible executable location = /usr/local/bin/ansible-playbook python version = 3.7.3 (default, Apr 10 2019, 01:29:41) [GCC 8.3.0] No config file found; using defaults /builds/my/repo/provision/hosts did not meet host_list requirements, check plugin documentation if this is unexpected /builds/my/repo/provision/hosts did not meet script requirements, check plugin documentation if this is unexpected Parsed /builds/my/repo/provision/hosts inventory source with ini plugin ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path. The error appears to have been in '/builds/my/repo/provision/roles/stands/tasks/main.yml': line 50, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: Create and start services ^ here
ансибл в начале пытается распарсить все файлы, если даже не дошло до таска, то форматирование поехало: пробелы/табы и тд
Andrii
а что по версиям на удалённом сервере? требования к модулю видел?
да, в итоге из-за версии была проблема, спасибо
Andrii
а кто какой ansible image использует для gitlab ?
inqfen
Самосбор
Andrey
Ребят мне нужно из словаря формировались темплейты, в темплейте хочу цикл. Как всё происходит - есть словарь ,есть таска которая скопирует темплейт и называет файл в зависимости от домена. В темплейте так же хочу циклом что бы подставлялись переменные в зависимости от домена. Но вот беда, не понимаю как сделать... Вот что есть https://pastebin.com/Xm9zDFEx При этом раскладе естественно все домены оказываются во всех файлах.
Aleksey
я чот запутался у меня есть моя роль vault-secret-retriever она получает по заданным параметрам секрет из волта и кладет в переменную в заданную ей группу. еще у меня есть роль nginxinc.nginx которой нужно подсунуть эти серты. но nginxinc.nginx хочет файлы. а vault-secret-retriever возвращает переменные. я не вижу как оставшись в рамках этих ролей склеить это. вижу два варианта. оба отстой. 1. сделать роль которая будет принимать переменные и делать из них файлы 2. сделать два плея. один будет запускать vault-secret-retriever и иметь post_tasks который сложит перменные в файлы а nginxinc возьмёт их. может есть более лучшие варианты ? отказываться от ролей я не хочу
Aleksey
Set_fact на делегат
Aleksandr
Хелп парни
у тебя в инвентори три хоста и на каждом хочешь только определенный server_name и root?\
Andrey
У нжингса 3 конфига
Andrey
На каждый хост свой
Aleksandr
а, все, понял
Aleksandr
ну семен семеныч, не так нужно готовить
Aleksandr
момент
Andrey
Хочу циклом, если ты про это
Andrey
Понимаю что где то ошибаюсь
Aleksandr
{% for (dom, fol) in host.iteritems() %} ты используешь переменную, которая в vars, а не которая прилетела к тебе из with_dict
Andrey
Так же понимаю почему это работает как работает. Вопрос как это заставить работать верно
Aleksandr
server { listen 80 default_server; listen [::]:80 default_server; {% for (dom, fol) in item.iteritems() %} server_name {{ fol.domain }}; root /var/www/{{ fol.folder }}; {% endfor %} index index.html; try_files $uri /index.
Aleksandr
в смысле?
Andrey
Ааа
Andrey
в смысле?
Понимаю, просто вечер. В глазки долблюсь
Andrey
И тут всё встало на свои места
Aleksandr
можешь вообще от цикла в шаблоне избавиться и просто использовать item.value.domain и item.value.folder
Andrey
Не суть, разберусь
Slava
Это может есть в документации, но я не нашел. Если выполняю playbook на 100 машинах с strategy: free, то в процессе выполнения хочется узнать на каком таске каждая из машин. Как это сделать? В какой-то файл пишется состояние может быть? Или может надо процессу послать HUP или что-то еще.
Lev
Set_fact на делегат
Чет не догнал. В роль приезжает параметр вычитай такой то ключ и выставь потом в имя такого-то факта? А че так можно было? Кмк абстракции текут. Роль не должна афектить вызов другой роли. Засунь свой волт ретривер в модуль. Я как то в схожей ситуации(вычитать дерево секретов из волта) делал инклюд файла, но это было в рамках одной роли и я контролил пременные
Lev
А что в чатике поставили ограничение сообщений в единицу времени?
Aleksey
- name: get ssl certificate set_fact: vault_ssl_key: "{{ secret | json_query(' data | key') }}" vault_ssl_cerificate: "{{ secret | json_query('data | certificate') }}" delegate_to: "{{ item }}" delegate_facts: True run_once: true loop: "{{ groups[register_secret_to_group] }}" при этом вызов роли - name: Play hosts: localhost gather_facts: false roles: - role: ansible-role-fetch-secret-vault vars: vault_url: https://vault ... register_secret_to_group: "nginx" # requeired
Aleksey
она по факту инжектит в группу ключи
Aleksey
плохой интерфейс вывода сделал ? как лучше?