通过Ansible playbook安装nodejs

时间:2017-11-18 00:18:54

标签: node.js ubuntu ansible

我创建了一个Vagrant vm(Ubuntu)并安装了Ansible。我可以ping我的localhost,这意味着我的虚拟机。我写了一个playbook来安装nodejs。

---
- hosts: node #it contains localhost
  gather_facts: no
  tasks:
  - name: install node.js
    shell: apt-get install nodejs
    sudo: yes

当我运行剧本时,状态显示成功。根据我的理解,它应该在我的虚拟机中安装nodejs和npm。但是,如果我输入node -v,则表明它尚未安装。

vagrant@vagrant-ubuntu-trusty-64:/vagrant_data$ ansible-playbook ping.yml

PLAY [node] *******************************************************************

TASK: [install node.js] *******************************************************
changed: [localhost]

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

vagrant@vagrant-ubuntu-trusty-64:/vagrant_data$ node -v
The program 'node' can be found in the following packages:
 * node
 * nodejs-legacy
Ask your administrator to install one of them

我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

  

我在这里做错了什么?

  • 您正在通过shell模块执行命令,而不是使用原生的幂等Ansible module;

  • 您正在执行apt-get而没有参数以阻止交互式提示(-y);

  • 您使用的是过时的sudo参数(在当前的Ansible版本中被忽略)而不是become;

  • 最后,您似乎在阅读屏幕消息和区分软件包名称时遇到问题:期望node.js安装node可执行文件,而您的系统明确指出它可以在nodenodejs-legacy个套餐。

Bonus:您正在通过一个单独的进程安装一组程序,这些程序设置和利用用户环境变量,但继续使用没有环境设置的shell会话(这对{{1没有直接影响)可执行的可用性,但无论如何都是一个错误。)