【问题标题】:Ansible playbook - environment variablesAnsible 剧本 - 环境变量
【发布时间】:2018-12-17 08:43:07
【问题描述】:

我正在尝试(新手)设置一个剧本,它将使用查找插件从保险库 (https://github.com/jhaals/ansible-vault) 中获取机密,但每次都会因缺少环境变量而失败。任何人都可以帮忙吗?感谢您的帮助。

PS:token 仅供测试

查找模块中有条件:

url = os.getenv('VAULT_ADDR')
        if not url:
            raise AnsibleError('VAULT_ADDR environment variable is missing')

剧本:

---
- hosts: localhost
  vars:
    vault1_env:
      VAULT_ADDR: https://localhost:8200/
      VAULT_TOKEN: my-token-id
      VAULT_SKIP_VERIFY: True

  tasks:
     - shell: echo VAULT_ADDR is $VAULT_ADDR, VAULT_TOKEN is $VAULT_TOKEN, VAULT_SKIP_VERIFY is $VAULT_SKIP_VERIFY
       environment: "{{ vault1_env }}"
       register: shellout
     - debug: var=shellout
     - debug: msg="{{ lookup('vault', 'secret/hello', 'value') }}"

输出:

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [command] *****************************************************************
changed: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "shellout": {
        "changed": true, 
        "cmd": "echo VAULT_ADDR is $VAULT_ADDR, VAULT_TOKEN is $VAULT_TOKEN, VAULT_SKIP_VERIFY is $VAULT_SKIP_VERIFY", 
        "delta": "0:00:00.001268", 
        "end": "2016-05-17 15:46:34.144735", 
        "rc": 0, 
        "start": "2016-05-17 15:46:34.143467", 
        "stderr": "", 
        "stdout": "VAULT_ADDR is https://localhost:8200/, VAULT_TOKEN is ab9b16c6-52d9-2051-0802-6f047d929b63, VAULT_SKIP_VERIFY is True", 
        "stdout_lines": [
            "VAULT_ADDR is https://localhost:8200/, VAULT_TOKEN is ab9b16c6-52d9-2051-0802-6f047d929b63, VAULT_SKIP_VERIFY is True"
        ], 
        "warnings": []
    }
}

TASK [debug] *******************************************************************
fatal: [localhost]: FAILED! => {"failed": true, "msg": "ERROR! VAULT_ADDR environment variable is missing"}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=1   

【问题讨论】:

    标签: ansible ansible-vault


    【解决方案1】:

    这里您只是为shell 模块设置环境变量,而不是为其他模块设置环境变量。如果您想跨多个模块或整个主机使用变量,您应该在所有模块或主机本身上使用use the environment attribute,如下所示:

    ---
    - hosts: localhost
      environment:
        VAULT_ADDR: https://localhost:8200/
        VAULT_TOKEN: my-token-id
        VAULT_SKIP_VERIFY: True
    

    【讨论】:

    • 这也不起作用...--- - hosts: localhost vars: vault1_env: VAULT_ADDR: https://localhost:8200/ VAULT_TOKEN: my-token-id VAULT_SKIP_VERIFY: True tasks: - shell: echo VAULT_ADDR is $VAULT_ADDR, VAULT_TOKEN is $VAULT_TOKEN, VAULT_SKIP_VERIFY is $VAULT_SKIP_VERIFY environment: "{{ vault1_env }}" register: shellout - debug: var=shellout - debug: msg="{{ lookup('vault', 'secret/hello', 'value') }}" environment: "{{ vault1_env }}"
    • @MUHAHA 刚刚看到您的插件是一个查找模块。这些模块在本地上下文中运行,我不确定您是否可以从 ansible 覆盖它。您可能会做的一件事是从 ansible 中调用 ansible 并预先设置环境变量。或者按照模块的建议,将环境变量导出到 ansible 之外。您可能还想向开发人员提出一张票
    • 或使用github.com/TerryHowe/ansible-modules-hashivault 可以在模块上设置变量(虽然它不是查找插件)
    【解决方案2】:

    您为什么不使用保管库功能来加密变量文件,然后将该文件包含在您的剧本中。

    http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 2019-08-30
      • 2018-09-21
      • 1970-01-01
      相关资源
      最近更新 更多