2016-04-13 10 views
0

Ich habe eine Maschine, die Zsh installiert hat. Ich habe das folgende Skript einige Installationen zu machen:Run Npm und Knoten von ansible

Installiert gemacht

# Install NVM 
sudo curl https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash 
## Reload shell to start using nvm 
. ~/.zshrc 
. ~/.nvm/nvm.sh 
nvm install 0.12 

Jetzt möchte ich auf die Instanz verbinden und ansible-Textbuch ausführen, das folgende Skript starten:

sh-script.sh

npm install aws-sdk 


node create-queue.js $machine_name 
node create-queue.js $machine_name 

Beim Abspielen des Playbooks erhalte ich folgende Fehler: Zeile 28: npm: Befehl nicht gefunden - Zeile 32: Knoten: Befehl nicht gefunden - Zeile 33: Knoten: Befehl nicht gefunden.

Wenn ich SSH an die Instanz und führen "Node" oder "Npm" bekomme ich eine gültige Antwort und gewünschte Bedingung. Die ansible-Textbuch ist sehr einfach:

ansible

- hosts: tag_Name_TestInstance 
    tasks: 
    - name: Run Script 
     shell: /home/ubuntu/sh-script.sh '{{ machine_name }}' 

Antwort

0

Dies ist wahrscheinlich, weil npm und Knoten haben zu Ihrem $PATH nicht hinzugefügt. Das Shell-Modul verwendet /bin/sh, um Ihren Befehl auszuführen.

Wenn Sie das Skript in zsh ausführen mögen, versuchen Sie den shebang mit dem Pfad zu Ihrer zsh Installation zB das Hinzufügen: !#/usr/local/bin/zsh

1

der beste Weg IMHO dies zu lösen, ist ein zusätzlichen bin Pfad zum ansible env hinzufügen .

- name: Install aws-sdk 
    command: /opt/node/bin/npm "something" 
    environment: 
     PATH: "{{ ansible_env.PATH }}:/opt/node/bin" 

oder Sie könnten die native ansible npm Funktion

description: Install "aws-sdk" node.js package. 
    - npm: name=aws-sdk path=/app/location 
    environment: 
     PATH: "{{ ansible_env.PATH }}:/opt/node/bin" 

und zwei andere Aufgaben verwenden Sie den Knoten js Skript auszuführen. Auf diese Weise könnten Sie auch mehr Informationen darüber haben, was vor sich geht.

viel glück

+0

Dank @nelasx Funktioniert wie ein Charme !! D –