无法设置环境变量以用于ansible角色

时间:2019-10-07 18:16:55

标签: ansible ansible-2.x ansible-template

当我在一个没有角色的单个剧本中定义了环境变量和任务时,我的剧本运行良好。

但是当我将项目组织成角色时,我发现正在运行的任务没有找到从原始剧本中设置的环境变量。
是否有任何提示说明如何设置环境变量,以便它们可用于剧本中的所有角色?

我是否需要在tasks/main.yaml文件中指定环境变量?如果是,该如何精确地执行?

cat playbook.yaml 
-
  name: Deploy Team Services Playbook
  hosts: all
  environment:
    PATH: "{{ ansible_env.PATH }}:/usr/local/bin"
    KUBECONFIG: "{{ ansible_env.HOME }}/.kube/config/{{ ansible_env.USER }}.kubeconfig"
  roles:
    - prereq1_setup
    - prereq2_k8s

prereq1_setup \ tasks \ main.yaml

      - name: "Validate kubeconfig set?"
        shell: echo {{ ansible_env.KUBECONFIG }}
        failed_when: "'KUBECONFIG' not in ansible_env"

如果我不使用角色,直接在下面添加任务,以上工作。当前,由于

出现错误

输出:

|TASK [prereq1_setup : Validate kubeconfig set?] *****************************************************
fatal: [target1]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'KUBECONFIG'\n\nThe error appears to be in '/Users/testu/ansible/ansible-team/team_deploy/roles/prereq1_setup/tasks/main.yaml': line 57, column 9, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n      - name: \"Validate kubeconfig set?\"\n        ^ here\n"}

1 个答案:

答案 0 :(得分:1)

  

任何提示如何设置环境变量,以便它们可用于剧本中的所有角色吗?

您使用的机制是正确的,并且已正确设置了环境变量,但它是在环境中设置的,而不是在可行事实中设置的。这些事实是在剧本启动之前收集的,因此您的environment:发生在事实收集之后,这说明了ansible_env不包含它的原因

根据您的喜好,您还有一些前进的路径:

  • 明确重新收集剧本中的事实(甚至将剧本更改为gather_facts: no并手动调用setup:
  • 请放心在ansible_env中寻找环境,并放心使用需要环境变量的命令
  • 明确声明一个单独的事实,以使该变量可同时用于environment:和ansible任务

如果要第一个,它看起来像:

-
  name: Deploy Team Services Playbook
  hosts: all
  gather_facts: no
  environment:
    whatever: goes here
  pre_tasks:
  - setup:
  roles:
  - and so forth

您可以通过以下方式确认第二个:

- name: ensure $KUBECONFIG is set
  shell: echo $KUBECONFIG

第三个看起来像:

- hosts: all
  environment:
    alpha: beta
  vars:
    alpha: beta
  roles:
  - # now {{ alpha }} is available to ansible and as $alpha in `commands:`