Я хотел бы использовать ansible
для развертывания конфигурации, которая на последнем этапе (пере) запускает службу.Этому сервису нужны переменные окружения, которые определены на моем хост-компьютере (тот, в котором хранится книга воспроизведения).Чтобы передать эти env var на мою целевую машину, я попытался добавить аргументы environment
к директиве ansible service
, выполнив следующее:
- name: start service
service:
name: my_service
state: restarted
environment:
OAUTH2_AUTHORIZE_URL: "{{ lookup('env','OAUTH2_AUTHORIZE_URL') }}"
OAUTH2_TOKEN_URL: "{{ lookup('env','OAUTH2_TOKEN_URL') }}"
CLIENT_SECRET: "{{ lookup('env','CLIENT_SECRET') }}"
Однако это не дает результата в том смысле, что эти переменныенеизвестно, когда служба запущена.Единственный способ найти решение этой проблемы - это изменить мою игровую книгу, выполнив следующие действия:
- name: set some env vars systemctl
shell: |
systemctl import-environment OAUTH2_AUTHORIZE_URL OAUTH2_TOKEN_URL CLIENT_SECRET
args:
executable: /bin/bash
environment:
OAUTH2_AUTHORIZE_URL: "{{ lookup('env','OAUTH2_AUTHORIZE_URL') }}"
OAUTH2_TOKEN_URL: "{{ lookup('env','OAUTH2_TOKEN_URL') }}"
CLIENT_SECRET: "{{ lookup('env','CLIENT_SECRET') }}"
- name: start my service
service:
name: my_service
state: restarted
- это правильный способ продолжить?
NB: будучи совершенно новым с ansible, я не играл с role
вещами, из-за которых я хотел бы остаться в данный момент.
Файл конфигурации Systemctl:
[Unit]
Description=my_service
After=syslog.target network.target
[Service]
Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
ExecStart=/bin/bash /root/start_myservice.sh
[Install]
WantedBy=multi-user.target
Служба для запуска:
#/bin/bash
echo "${CLIENT_SECRET}"
echo "${OAUTH2_AUTHORIZE_URL}"
echo "${OAUTH2_TOKEN_URL}"