如何在Ansible playbook中设置环境变量

9

我正在尝试通过ansible playbook设置环境变量来安装带有vbisam的gnucobol。但是在执行playbook时,这些变量没有被设置。

 name: Setting variables for CPPFLAGS
 shell: "echo $CPPFLAGS"
 environment:
  CPPFLAGS: -I/opt/vbisam-2.0/include

 name: Setting variables for LDFLAGS
 shell: "echo $LDFLAGS"
 environment:
  LDFLAGS: -L/opt/vbisam-2.0/lib

 name: Setting variables for LD_LIBRARY_PATH
 shell: "echo $LD_LIBRARY_PATH"
 environment:
  LD_LIBRARY_PATH: /opt/vbisam-2.0/lib:${LD_LIBRARY_PATH}

有人能帮我解决这个问题吗?


1
如果你不检查结果,你怎么知道它们没有被设置?另外,你是否了解系统中环境变量的工作原理? - techraf
1个回答

12

你的环境变量肯定已经被设置了。你现有的任务中没有尝试去验证这个,那么我们添加一个验证的任务。例如,如果我们运行这个playbook:

- hosts: localhost
  tasks:
    -  name: Setting variables for CPPFLAGS
       shell: "echo $CPPFLAGS"
       environment:
         CPPFLAGS: -I/opt/vbisam-2.0/include
       register: cppflags

    - debug:
        var: cppflags.stdout

我们将看到以下输出:

PLAY [localhost] *******************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************
ok: [localhost]

TASK [Setting variables for CPPFLAGS] **********************************************************************************************************
changed: [localhost]

TASK [debug] ***********************************************************************************************************************************
ok: [localhost] => {
    "cppflags.stdout": "-I/opt/vbisam-2.0/include"
}

PLAY RECAP *************************************************************************************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=0   

正如@techraf在评论中暗示的那样,重要的是要理解使用environment在任务上设置环境变量仅为该任务设置。也就是说,如果您想同时设置CPPFLAGSLDFLAGSLD_LIBRARY_PATH,您需要做类似以下的事情:

    -  name: Setting variables for CPPFLAGS
       shell: "echo $CPPFLAGS"
       environment:
         CPPFLAGS: -I/opt/vbisam-2.0/include
         LDFLAGS: -L/opt/vbisam-2.0/lib
         LD_LIBRARY_PATH: /opt/vbisam-2.0/include
       register: cppflags

如果您需要在多个任务中设置这些变量,您需要将相同的环境(environment)关键字应用于每个任务,或者将环境(environment)设置在play而不是单个任务上。


2
嘿,有没有人能提供关于如何改进这个答案的意见? - larsks
@larsks,抱歉,我不知道它是怎么发生的。也许我不小心按了“踩”按钮,但现在在你修改答案之前我无法更正我的错误。再次抱歉。 - Denis Savenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接