Ansible如何访问Linux Shell 环境变量?
参考答案:
Ansible本身并不直接访问Linux Shell的环境变量,但它提供了几种方法可以在执行任务时利用或设置环境变量。
- 在Playbook中设置环境变量:
你可以在Ansible的playbook中使用
environment
关键字来设置环境变量。这些环境变量将仅对当前playbook的任务有效。
- hosts: your_host
tasks:
- name: Run a command with environment variable
command: your_command
environment:
MY_VAR: "my_value"
在这个例子中,MY_VAR
环境变量将被设置为my_value
,并仅对your_command
命令有效。
2. 使用Shell模块并直接在命令中设置环境变量:
你也可以在shell命令中直接设置环境变量,然后执行你的命令。这通常用于临时环境变量或一次性的任务。
- hosts: your_host
tasks:
- name: Run a command with environment variable set in command
shell: MY_VAR=my_value your_command
- 使用
set_fact
模块设置Fact: 虽然这不是环境变量,但set_fact
模块允许你在Ansible的事实系统中设置值,这些值可以在后续的任务中使用。
- hosts: your_host
tasks:
- name: Set a fact
set_fact:
my_fact: "my_value"
- name: Use the fact in a command
command: echo "{{ my_fact }}"
- 利用宿主机的环境变量:
如果你想利用宿主机(即运行Ansible的机器)的环境变量,你需要在Ansible脚本或playbook中显式地引用它们。例如,如果你有一个名为
MY_VAR
的环境变量,并且你想在Ansible中使用它,你需要这样做:{{ lookup('env', 'MY_VAR') }}
。 - 在Ansible Tower/AWX中设置环境变量: 如果你使用Ansible Tower或AWX,你可以在Job Template或Project设置中设置环境变量,这些变量将在执行时自动添加到环境中。
- 使用
--extra-vars
命令行选项: 你也可以在运行Ansible命令时使用--extra-vars
选项来传递环境变量或其他变量。
例如:
ansible-playbook my_playbook.yml --extra-vars "MY_VAR=my_value"
请注意,尽管这些方法允许你在Ansible任务中设置和使用环境变量,但它们并不改变目标机器上的实际环境变量。如果你需要永久地更改目标机器的环境变量,你应该使用适当的方法(如修改.bashrc
、.bash_profile
、/etc/environment
等文件)来实现。