【问题标题】:use system-wide environment variable when running a service with ansible使用 ansible 运行服务时使用系统范围的环境变量
【发布时间】: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}"

【问题讨论】:

    标签: ansible systemctl


    【解决方案1】:

    在 systemd 服务单元中,您可以使用 EnvironmentFile 指令以比使用 Environment 更方便的方式传递环境变量。如果需要,它还允许跨服务共享变量。

    您可以使用 ansible 安装包含环境变量的文件,使用简单的copy 或使用template,例如在/etc/<service>/environment

    这样您就无需在每次部署时都设置这些变量。仅在您首次设置服务以及需要更改这些设置时进行一次。

    另外,据我了解,使用 import-environment 意味着 systemd 会将您导入的变量传递给所有单元,这可能不是您想要的。尤其是CLIENT_SECRET 一个。

    【讨论】:

    • 非常感谢。我阅读了有关 EnvironmentFile 选项的信息。似乎它允许像 Environment 选项一样设置环境变量,但不能使用现有的。没有成功找到解决问题的正确方法可能表明我尝试做的事情是错误的。
    猜你喜欢
    • 2019-12-15
    • 2021-05-16
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 2020-05-29
    • 2015-08-20
    • 2015-09-16
    • 1970-01-01
    相关资源
    最近更新 更多