在Ansible中,如何使用environment关键字?

kle*_*ell 13 ansible

我有一个安装PythonBrew的剧本.为此,我必须修改shell环境.因为Ansible中的shell步骤不是持久的,所以我必须在export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc;每个与PythonBrew相关的命令的开头处添加前缀:

    - name: Install python binary
      shell: export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc; pythonbrew install ${python.version}
        executable=/bin/bash

    - name: Switch to python version
      shell: export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc; pythonbrew switch ${python.version}
        executable=/bin/bash
Run Code Online (Sandbox Code Playgroud)

我想消除那种冗余.在Ansible讨论组中,我被引用了environment关键字.我查看了文档中的示例,而不是单击我.对我来说,environment关键字与其他任何变量都没有太大的不同.

我找了其他的例子,但只能找到这个非常简单的例子.

有人可以演示environment关键字在Ansible中的功能,最好是我上面提供的代码示例吗?

mag*_*tik 16

不确定它是否符合您的需求,但这就是我看到的方式:

- hosts: all
  vars:
    env:
      PYTHONBREW_ROOT: "{{ pythonbrew.root }}"
  tasks:  
    - name: Install python binary
      shell: pythonbrew install {{ python.version }} executable=/bin/bash
      environment: env

    - name: Switch to python version
      shell: pythonbrew switch {{ python.version }} executable=/bin/bash
      environment: env
Run Code Online (Sandbox Code Playgroud)

它只是设置一个名为的变量,env并在两个shell命令中将其重用为环境.这样,shell命令将设置PYTHONBREW_ROOT路径.

  • 至少在当前版本的Ansible中,这个例子不是**工作.`executable =/bin/bash`行必须与`shell:...`在同一行.我相应地更新了答案. (2认同)