为整个剧本重新加载PATH

时间:2015-10-27 09:37:53

标签: ansible

作为大多数Ansible剧本的一部分,我需要从内部托管的tarball安装Node和Mongo。 Sudo特权和互联网访问不可用。所有Ansible运行都发生在localhost上。

此设置的一个问题是,在解开节点/ mongo之后,需要将它们添加到PATH,否则后续角色/任务将无法依赖它们。不幸的是,我似乎无法在Ansible playbook运行中找到修改PATH的方法。

我已经尝试使用shell和命令任务来导出PATH和源.bashrc,这些似乎都没有帮助。有没有办法在同一个剧本中使用我的节点安装? yum任务似乎可以解决问题,但现在我无法使用它。

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用'环境'?

您可以将本地PATH变为变量

environment:  
    PATH: "{{ lookup('env', 'PATH') }}"

或者您可以设置路径

environment:  
   PATH: "{{ node_path }}:{{mongo_path}}:{{ lookup('env', 'PATH') }}"

以上假设您可以注册mongo&的路径。节点为vars,并使其可供以后播放。

使用环境和信息的信息PATH本地和远程在这里: https://serverfault.com/questions/577188/how-can-i-prepend-to-path-while-running-ansibles-pip-module

- hosts: localhost  
  gather_facts: False
  vars:
    path1: "{{lookup('env', 'PATH')}}"
  tasks:
  - shell: echo $PATH
    environment:
      PATH: 'mypath2'
    register: path2
  - shell: echo $PATH
    environment:
      PATH: 'mypath3'
    register: path3
  - shell: echo $PATH
    environment:
      PATH: "{{ path1 }}"
    register: path4


  - debug: msg={{path1}}
  - debug: msg={{path2}}
  - debug: msg={{path3}}
  - debug: msg={{path4}}
  - debug: msg={{lookup('env', 'PATH')}}