【发布时间】:2019-10-19 02:51:26
【问题描述】:
我想使用ansible 部署配置,作为最后一步,(重新)启动服务。该服务需要在我的主机(存储剧本的那个)中定义的环境变量。为了将这些环境变量传递给我的目标机器,我尝试通过执行以下操作将 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
这是正确的方法吗?
注意:我对 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}"
【问题讨论】: