6

I've come across a problem with Anisble hanging when trying to start a forever process on an Ansible node. I have a very simple API server I'm creating in vagrant and provisioning with Ansible like so:

---
- hosts: all
  sudo: yes

  roles:
    - Stouts.nodejs
    - Stouts.mongodb

  tasks:
    - name: Install Make Dependencies
      apt: name={{ item }} state=present
      with_items:
        - gcc
        - make
        - build-essential

    - name: Run NPM Update
      shell: /usr/bin/npm update

    - name: Create MongoDB Database Folder
      shell: /bin/mkdir -p /data/db
      notify:
        - mongodb restart

    - name: Generate Dummy Data
      command: /usr/bin/node /vagrant/dataGen.js

    - name: "Install forever (to run Node.js app)."
      npm: name=forever global=yes state=latest

    - name: "Check list of Node.js apps running."
      command: /usr/bin/forever list
      register: forever_list
      changed_when: false

    - name: "Start example Node.js app."
      command: /usr/bin/forever start /vagrant/server.js
      when: "forever_list.stdout.find('/vagrant/server.js') == -1"

But even though Ansible acts like everything is fine, no forever process is started. When I change a few lines to remove the when: statement and force it to run, Ansible just hands, possibly running the forever process (forever, I presume) but not launching the VM to where I can interact with it.

I've referenced essentially two points online; the only sources I can find.

Community
  • 1
  • 1

1 Answers1

0

as stated in the comments the variable content needs to be included in your question for anyone to provide a correct answer but to overcome this I suggest you can do it like so:

    - name: "Check list of Node.js apps running."
      command: /usr/bin/forever list|grep '/vagrant/server.js'|wc -l
      register: forever_list
      changed_when: false

    - name: "Start example Node.js app."
      command: /usr/bin/forever start /vagrant/server.js
      when: forever_list.stdout == "0"

which should prevent ansible from starting the JS app if it's already running.

Roman Spiak
  • 166
  • 5