在我的剧本中,我想检测是否定义了某个环境变量。如果已定义,那么我想执行某些操作,否则执行其他操作。
问题:如果定义了特定的shell环境变量,我如何检测呢?
答案 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的各个部分看起来会有所不同,具体取决于您连接到远程主机的用户身份。