如何检查是否定义了SHELL(/ bin / sh)环境变量

时间:2019-02-07 21:19:17

标签: ansible

在我的剧本中,我想检测是否定义了某个环境变量。如果已定义,那么我想执行某些操作,否则执行其他操作。

问题:如果定义了特定的shell环境变量,我如何检测呢?

2 个答案:

答案 0 :(得分:2)

假设您要当前用户:

- name: Get current user.
  set_fact:
    whoami: "{{ lookup('env','USER') }}"

这不会告诉您变量是否已定义。如果该变量未在环境中定义,则您的set_fact变量将为空。如果您想使用一些默认值(如果未设置变量)...

- name: See if environment variable MYVAR is set
  shell: "env | grep '^MYVAR='"
  failed_when: 1 == 0
  register: result

- name: Get MYVAR or use 'DEFAULT'
  set_fact:
    myvar: "{% if result.rc == 0 %}{{ lookup('env','MYVAR') }}{% else %}DEFAULT{% endif %}"

答案 1 :(得分:0)

阅读Ansible Facts并结帐:

- debug:
    var: ansible_env

因此,对于有条件的东西,您可以执行以下操作:

- set_fact:
    env_var: <SOME ENV VAR TO CHECK FOR>
- debug:
    msg: "ENV {{ env_var }} is {{ ansible_env[env_var] is defined | ternary('defined', 'not defined') }}"

结果为:

TASK [debug] ********************************************************************************************************
ok: [localhost] => {
    "msg": "ENV USER is defined"
}

TASK [debug] ********************************************************************************************************
ok: [localhost] => {
    "msg": "ENV USR is not defined"
}

对于env_var设置为'USER&'USR'。

请记住,env的各个部分看起来会有所不同,具体取决于您连接到远程主机的用户身份。