gpt4 book ai didi

ubuntu - 用于 Vagrant 的 Ansible 配置器中的 $PATH 环境变量

转载 作者:行者123 更新时间:2023-12-04 18:38:05 25 4
gpt4 key购买 nike

当使用 Ansible 作为 Vagrant 的配置器时,我在 /etc/environment 中定义的变量没有被捡起。我找不到说明 vagrant 如何构建它的环境变量的文档。

我应该修改哪个文件以便更新到 PATH环境被 Ansible 供应商拾取?

// In my foo role/task...

- name: check path
command: msg="{{ print $PATH }}"

结果是
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

我想修改我的 $PATH以便 Ansible 供应商和用户在登录到我的 Vagrant 框时都可以使用它。

相关问题:
  • Ansible - accessing local environment variables

  • 当前/etc/environment 配置:
    vagrant@localhost:~$ cat /etc/environment 
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/bin/composer:/home/vagrant/.composer/vendor/bin"

    roles/ansible_dev的内容:
    - name: check path
    shell: echo $PATH
    register: PATH
    - debug: var=PATH
    # outputs /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

    - name: update path
    shell: source /etc/environment;export PATH

    # outputs the same, note my .composer directory still missing at the end
    - name: check path AGAIN
    command: echo $PATH
    register: PATH2
    - debug: var=PATH2

    测试

    之后 vagrant up我在做 vagrant provision --provision-with=ansible用于检测。
    TASK: [ansible_dev | check path] ********************************************** 
    changed: [localhost]

    TASK: [ansible_dev | debug var=PATH] ******************************************
    ok: [localhost] => {
    "PATH": {
    "changed": true,
    "cmd": "echo $PATH",
    "delta": "0:00:00.002239",
    "end": "2014-10-15 03:04:34.604944",
    "invocation": {
    "module_args": "echo $PATH",
    "module_name": "shell"
    },
    "rc": 0,
    "start": "2014-10-15 03:04:34.602705",
    "stderr": "",
    "stdout": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
    "stdout_lines": [
    "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ]
    }
    }

    TASK: [ansible_dev | update path] *********************************************
    changed: [localhost]

    TASK: [ansible_dev | check path AGAIN] ****************************************
    changed: [localhost]

    TASK: [ansible_dev | debug var=PATH2] *****************************************
    ok: [localhost] => {
    "PATH2": {
    "changed": true,
    "cmd": [
    "echo",
    "$PATH"
    ],
    "delta": "0:00:00.003051",
    "end": "2014-10-15 03:04:34.814571",
    "invocation": {
    "module_args": "echo $PATH",
    "module_name": "command"
    },
    "rc": 0,
    "start": "2014-10-15 03:04:34.811520",
    "stderr": "",
    "stdout": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
    "stdout_lines": [
    "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ]
    }
    }

    最佳答案

    所以我认为使用 ansible 来配置 /etc/environment很好,当盒子完全配置好并且您通过 ssh 登录时,您在那里所做的更改应该在那些登录 shell session 中有效。我的猜测是 ansible 只是建立一个初始的 ssh 连接,根据初始 /etc/environment 加载 shell 环境。和各种 bash 配置文件,从而为您提供初始 PATH .然后你的剧本会改变/etc/environment但这不会自动重新加载当前 session 。您可能会幸运地使用命令执行 exec $SHELL然后你的剧本剧本应该有新的PATH .如果还是不行,试试source /etc/environment;export PATH .

    关于ubuntu - 用于 Vagrant 的 Ansible 配置器中的 $PATH 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26371973/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com