首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ansible中执行命令之前获取文件

在Ansible中执行命令之前获取文件
EN

Stack Overflow用户
提问于 2016-12-29 19:46:39
回答 1查看 14.6K关注 0票数 19

我正在尝试使用nvm安装node js版本,使用下面的Ansible yml文件。

我收到类似于源"source /home/centos/.nvm/nvm.sh“文件未找到的错误。但是如果我使用ssh登录机器来做同样的事情,那么它工作得很好。

代码语言:javascript
复制
- 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

错误:

代码语言:javascript
复制
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}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-29 20:08:15

关于“没有这样的文件”错误:

source是一个内部外壳命令(例如参见Bash Builtin Commands),而不是您可以运行的外部程序。您的系统中没有名为source的可执行文件,这就是您收到No such file or directory错误的原因。

使用shell代替command模块,它将在shell中执行source命令。

关于采购问题:

with_items循环中,Ansible将运行shell两次,并且这两个进程将彼此独立。在其中一个中设置的变量将不会被另一个看到。

您应该在一个shell进程中运行这两个命令,例如:

代码语言:javascript
复制
- 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编写代码。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41379083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档