Boris
Yuryi
Ждун
ребята, если есть менеджмент машинка, куда все заходят для запуска ansible playbooks, в какой директории лучше всего хранить эти shared playbooks? (вопрос скорее по юниксам а не по ансиблю)
inqfen
В коде и заупскать раннером
inqfen
И не хранить на машине
Radik
а ещё вопрос
а с тимсити+ансибл как быть?
Radik
плагинов нет, как оказалось
просто с какой-либо ансибл тачки запускать плейбуки?
Tadeusz
Radik
Tadeusz
да, стучи
inqfen
Отдел КГБ закрыт на ремонт, просьба стучать по телефону
Sergey
inqfen
нет в коде - нет в проде
Denis 災 nobody
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
Sergey
inqfen
inqfen
а смотреть на какие-то переменные на удаленной машине в bashrc это вообще путь в пропасть
Sergey
^^^ +++
Max
Ты хочешь странного - не надо так.
ну как это не надо. Задача именно такая. Есть много удаленных серверов. На них в /root/.bashrc прописана некая переменаня. И на этих серверах надо выполнять команду типа some_command $MY_VAR. На локальном сервере у меня этих данных $MY_VAR нет, они именно в .bashrc на удаленных серверах прописаны
Sergey
tutunak
Dmitry
Max
Ты хочешь странного - не надо так.
Если бы я с нуля все эти сервера делал бы, я бы так конечно не поступил бы. Но сервера уже есть, в них все уже давно работает, и я там изменить ничего не смогу.
inqfen
Lamobot
Sergey
tutunak
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
я ж на удаленной виртуалке запускаю
Sergei
да на синтаксис он ругается, я был не прав по началу, по-хорошему видеть весь мейн
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
Самосбор
Timur
Andrey
Ребят мне нужно из словаря формировались темплейты, в темплейте хочу цикл. Как всё происходит - есть словарь ,есть таска которая скопирует темплейт и называет файл в зависимости от домена. В темплейте так же хочу циклом что бы подставлялись переменные в зависимости от домена. Но вот беда, не понимаю как сделать... Вот что есть https://pastebin.com/Xm9zDFEx При этом раскладе естественно все домены оказываются во всех файлах.
Aleksey
я чот запутался у меня есть моя роль vault-secret-retriever
она получает по заданным параметрам секрет из волта и кладет в переменную в заданную ей группу.
еще у меня есть роль nginxinc.nginx которой нужно подсунуть эти серты.
но nginxinc.nginx хочет файлы.
а vault-secret-retriever возвращает переменные.
я не вижу как оставшись в рамках этих ролей склеить это.
вижу два варианта. оба отстой.
1. сделать роль которая будет принимать переменные и делать из них файлы
2. сделать два плея. один будет запускать vault-secret-retriever и иметь post_tasks который сложит перменные в файлы а nginxinc возьмёт их.
может есть более лучшие варианты ? отказываться от ролей я не хочу
Lev
Aleksey
Set_fact на делегат
Andrey
Aleksandr
Хелп парни
у тебя в инвентори три хоста и на каждом хочешь только определенный server_name и root?\
Andrey
Andrey
У нжингса 3 конфига
Andrey
На каждый хост свой
Aleksandr
а, все, понял
Aleksandr
ну семен семеныч, не так нужно готовить
Andrey
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.
Andrey
Aleksandr
в смысле?
Andrey
Ааа
Andrey
в смысле?
Понимаю, просто вечер. В глазки долблюсь
Andrey
И тут всё встало на свои места
Andrey
Aleksandr
можешь вообще от цикла в шаблоне избавиться и просто использовать item.value.domain и item.value.folder
Andrey
Andrey
Andrey
Не суть, разберусь
Aleksey
Slava
Это может есть в документации, но я не нашел. Если выполняю playbook на 100 машинах с strategy: free, то в процессе выполнения хочется узнать на каком таске каждая из машин. Как это сделать? В какой-то файл пишется состояние может быть? Или может надо процессу послать HUP или что-то еще.
Lev
Set_fact на делегат
Чет не догнал. В роль приезжает параметр вычитай такой то ключ и выставь потом в имя такого-то факта? А че так можно было?
Кмк абстракции текут. Роль не должна афектить вызов другой роли. Засунь свой волт ретривер в модуль.
Я как то в схожей ситуации(вычитать дерево секретов из волта) делал инклюд файла, но это было в рамках одной роли и я контролил пременные
Lev
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
плохой интерфейс вывода сделал ? как лучше?
Aleksey