weareinteractive.pm2
is an Ansible role which:
- installs pm2
- manages JSON apps
- configures service
Using ansible-galaxy
:
$ ansible-galaxy install weareinteractive.pm2
Using requirements.yml
:
- src: weareinteractive.pm2
Using git
:
$ git clone https://github.com/weareinteractive/ansible-pm2.git weareinteractive.pm2
- Ansible >= 2.0
- installed nodejs i.e. with weareinteractive.nodejs
Note:
Since Ansible Galaxy supports organization now, this role has moved from
franklinkim.pm2
toweareinteractive.pm2
!
Here is a list of all the default variables for this role, which are also available in defaults/main.yml
.
---
# pm2_cmd:
# - run: sendSignal # pm2 command name
# args: SIGUSR2 my-app # optional arguements to pass
# path: /var/www/myapp # optional chdir path
# ignore_errors: yes # optional don't fail on pm2 errors
# env: # optional environment settings
# NODE_ENV: production
# pm2_apps:
# - run: pm2.json # you can also run a .js file like app.js
# cmd: start # optional command to run on the app
# args: --name console_error # optional arguements to pass i.e. to app.js
# path: /var/www/myapp # optional chdir path
# env: # optional environment settings
# NODE_ENV: production
#
# list of commands to run
# note: these will be executed before managing apps
pm2_cmds:
# note: delete all apps initially on every run so only configured apps exist
- run: delete all
# default env to run on cmds
pm2_cmds_default_env: {}
# list of paths to JSON app declarations
pm2_apps: []
# default env to run on apps
pm2_apps_default_env: {}
# default command to run on apps
pm2_apps_default_cmd: start
# delete all initially on every run
pm2_apps_delete_all: yes
# service name for startup system
pm2_service_name: pm2-init.sh
# start on boot
pm2_service_enabled: yes
# current state: started, stopped
pm2_service_state: started
# version
pm2_version:
# user to run pm2 commands
pm2_user: "{{ ansible_user_id }}"
These are the handlers that are defined in handlers/main.yml
.
---
- name: restart pm2
service:
name: "{{ pm2_service_name }}"
state: restarted
when: pm2_service_state != 'stopped'
- name: reload pm2
service:
name: "{{ pm2_service_name }}"
state: reloaded
when: pm2_service_state != 'stopped'
- name: update pm2
shell: pm2 updatePM2
when: pm2_service_state != 'stopped'
This is an example playbook:
---
- hosts: all
become: yes
# pre_tasks for installing dependencies for running the tests within docker
pre_tasks:
- name: Downloading install script
get_url:
url: http://deb.nodesource.com/setup_5.x
dest: /tmp/setup_nodejs
mode: "0777"
- name: Installing sources
command: /tmp/setup_nodejs
args:
creates: /usr/local/bin/node
- name: Installing packages
action: "{{ ansible_pkg_mgr }}"
args:
pkg: nodejs
state: present
roles:
- weareinteractive.pm2
vars:
#pm2_user: vagrant
pm2_cmds:
- run: delete
args: console_error
ignore_errors: yes
pm2_apps:
- run: apps.json
path: "/etc/ansible/roles/weareinteractive.pm2/tests"
cmd: startOrGracefulReload
- run: console_error.js
args: --name console_error
path: "/etc/ansible/roles/weareinteractive.pm2/tests/apps"
cmd: start
env:
NODE_ENV: dev
pm2_service_name: pm2
pm2_apps_default_env:
NODE_ENV: production
$ git clone https://github.com/weareinteractive/ansible-pm2.git
$ cd ansible-pm2
$ make test
In lieu of a formal style guide, take care to maintain the existing coding style. Add unit tests and examples for any new or changed functionality.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Note: To update the README.md
file please install and run ansible-role
:
$ gem install ansible-role
$ ansible-role docgen
Copyright (c) We Are Interactive under the MIT license.