跳到主要内容

Ansible如何访问Linux Shell 环境变量?

参考答案:

Ansible本身并不直接访问Linux Shell的环境变量,但它提供了几种方法可以在执行任务时利用或设置环境变量。

  1. 在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
  1. 使用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 }}"
  1. 利用宿主机的环境变量: 如果你想利用宿主机(即运行Ansible的机器)的环境变量,你需要在Ansible脚本或playbook中显式地引用它们。例如,如果你有一个名为MY_VAR的环境变量,并且你想在Ansible中使用它,你需要这样做:{{ lookup('env', 'MY_VAR') }}
  2. 在Ansible Tower/AWX中设置环境变量: 如果你使用Ansible Tower或AWX,你可以在Job Template或Project设置中设置环境变量,这些变量将在执行时自动添加到环境中。
  3. 使用--extra-vars命令行选项: 你也可以在运行Ansible命令时使用--extra-vars选项来传递环境变量或其他变量。

例如:

ansible-playbook my_playbook.yml --extra-vars "MY_VAR=my_value"

请注意,尽管这些方法允许你在Ansible任务中设置和使用环境变量,但它们并不改变目标机器上的实际环境变量。如果你需要永久地更改目标机器的环境变量,你应该使用适当的方法(如修改.bashrc.bash_profile/etc/environment等文件)来实现。