在 Ansible 中执行命令之前获取文件
Sourcing a file before executing commands in Ansible
我正在尝试使用以下 Ansible yml 文件使用 nvm 安装节点 js 版本。
我收到类似源 "source /home/centos/.nvm/nvm.sh" 文件未找到的错误。但是,如果我通过使用 ssh 登录机器来做同样的事情,那么它就可以正常工作。
- name: Install nvm
git: repo=https://github.com/creationix/nvm.git dest=~/.nvm version={{ nvm.version }}
tags: nvm
- name: Source nvm in ~/.profile
lineinfile: >
dest=~/.profile
line="source ~/.nvm/nvm.sh"
create=yes
tags: nvm
- name: Install node {{ nvm.node_version }}
command: "{{ item }}"
with_items:
- "source /home/centos/.nvm/nvm.sh"
- nvm install {{ nvm.node_version }}
tags: nvm
错误:
failed: [172.29.4.71] (item=source /home/centos/.nvm/nvm.sh) => {"cmd": "source /home/centos/.nvm/nvm.sh", "failed": true, "item": "source /home/centos/.nvm/nvm.sh", "msg": "[Errno 2] No such file or directory", "rc": 2}
failed: [172.29.4.71] (item=nvm install 6.2.0) => {"cmd": "nvm install 6.2.0", "failed": true, "item": "nvm install 6.2.0", "msg": "[Errno 2] No such file or directory", "rc": 2}
关于 "no such file" 错误:
source
是一个内部 shell 命令(参见示例 Bash Builtin Commands),而不是您可以 运行 的外部程序。您的系统中没有名为 source
的可执行文件,这就是您收到 No such file or directory
错误的原因。
使用shell
代替command
模块,它将在shell.
中执行source
命令
关于货源问题:
在 with_items
循环中,Ansible 将 运行 shell 两次,并且两个进程将相互独立。一个设置的变量不会被另一个看到。
您应该 运行 在一个 shell 进程中执行两个命令,例如:
- name: Install node {{ nvm.node_version }}
shell: "source /home/centos/.nvm/nvm.sh && nvm install {{ nvm.node_version }}"
tags: nvm
其他备注:
在 git
任务中使用 {{ ansible_env.HOME }}
而不是 ~
。任何一个都可以在这里工作,但波浪线扩展是 shell 的功能,并且您正在为 Ansible 编写代码。
我正在尝试使用以下 Ansible yml 文件使用 nvm 安装节点 js 版本。
我收到类似源 "source /home/centos/.nvm/nvm.sh" 文件未找到的错误。但是,如果我通过使用 ssh 登录机器来做同样的事情,那么它就可以正常工作。
- name: Install nvm
git: repo=https://github.com/creationix/nvm.git dest=~/.nvm version={{ nvm.version }}
tags: nvm
- name: Source nvm in ~/.profile
lineinfile: >
dest=~/.profile
line="source ~/.nvm/nvm.sh"
create=yes
tags: nvm
- name: Install node {{ nvm.node_version }}
command: "{{ item }}"
with_items:
- "source /home/centos/.nvm/nvm.sh"
- nvm install {{ nvm.node_version }}
tags: nvm
错误:
failed: [172.29.4.71] (item=source /home/centos/.nvm/nvm.sh) => {"cmd": "source /home/centos/.nvm/nvm.sh", "failed": true, "item": "source /home/centos/.nvm/nvm.sh", "msg": "[Errno 2] No such file or directory", "rc": 2}
failed: [172.29.4.71] (item=nvm install 6.2.0) => {"cmd": "nvm install 6.2.0", "failed": true, "item": "nvm install 6.2.0", "msg": "[Errno 2] No such file or directory", "rc": 2}
关于 "no such file" 错误:
source
是一个内部 shell 命令(参见示例 Bash Builtin Commands),而不是您可以 运行 的外部程序。您的系统中没有名为 source
的可执行文件,这就是您收到 No such file or directory
错误的原因。
使用shell
代替command
模块,它将在shell.
source
命令
关于货源问题:
在 with_items
循环中,Ansible 将 运行 shell 两次,并且两个进程将相互独立。一个设置的变量不会被另一个看到。
您应该 运行 在一个 shell 进程中执行两个命令,例如:
- name: Install node {{ nvm.node_version }}
shell: "source /home/centos/.nvm/nvm.sh && nvm install {{ nvm.node_version }}"
tags: nvm
其他备注:
在 git
任务中使用 {{ ansible_env.HOME }}
而不是 ~
。任何一个都可以在这里工作,但波浪线扩展是 shell 的功能,并且您正在为 Ansible 编写代码。