Puppet Class: pm2::create_app
- Defined in:
- manifests/create_app.pp
Overview
Class: pm2::create_app
install a nodejs app and run in pm2
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'manifests/create_app.pp', line 5
class pm2::create_app(
$name = '',
$app = $name,
$appversion = 'latest',
$path = "/opt/nodejs/${name}",
$script = 'lib/app.js',
$args = [],
$env = '',
$install_root = '/opt',
$install_dir = 'nodejs',
$deamon_user = 'nodejs')
{
$install_path = "${install_root}/${install_dir}"
file { $path:
ensure => directory,
owner => $deamon_user,
group => $deamon_user,
mode => '0750'
}
file { "${path}/${appversion}":
ensure => directory,
owner => $deamon_user,
group => $deamon_user,
mode => '0750',
require => File[$path]
}
exec { "npm install ${app}":
command => "npm install ${app}@${appversion}",
path => $::path,
timeout => 0,
cwd => "${path}/${appversion}",
require => File["${path}/${appversion}"]
}
exec { "fixup ${app}":
command => "chown -Rf ${deamon_user}:${deamon_user} '${path}/${appversion}'",
timeout => 0,
cwd => "${path}/${appversion}",
require => Exec["npm install ${app}"]
}
file { "${path}/pm2.json":
ensure => present,
owner => $deamon_user,
group => $deamon_user,
mode => '0444',
content => template('pm2/pm2.json.erb'),
require => Exec["fixup ${app}"],
}
file { "/var/log/pm2/${name}":
ensure => directory,
owner => $deamon_user,
group => $deamon_user,
mode => '0755',
require => File["${path}/pm2.json"]
}
file { "${path}/logs":
ensure => 'link',
target => "/var/log/pm2/${name}",
owner => $deamon_user,
group => $deamon_user,
mode => '0755',
require => File["/var/log/pm2/${name}"]
}
file { "${path}/pids":
ensure => 'link',
target => '/var/run/pm2',
owner => $deamon_user,
group => $deamon_user,
require => File["${path}/logs"]
}
# HACK: `pm2 reload` does NOT reload changes to the pm2.json file
# the only way to process changes in the pm2.json file is to delete and
# then start the app
# BUG: bug in PM2 means have to set HOME variable for user
exec { "pm2 delete ${name}":
command => "pm2 delete ${name}",
timeout => 0,
path => $::path,
user => $deamon_user,
group => $deamon_user,
environment => ["HOME=${install_root}/${install_dir}"],
cwd => "${path}/current",
onlyif => "pm2 -m list | grep '\-\-\- ${name}'",
require => File["${path}/pids"]
}
file { "${path}/current":
ensure => 'link',
target => "${path}/${appversion}",
owner => $deamon_user,
group => $deamon_user,
require => Exec["pm2 delete ${name}"]
}
# now tell pm2 to startup using a cluster with as many nodes as CPUs
# BUG: bug in PM2 means have to set HOME variable for user
exec { "pm2 start '${path}/pm2.json' --name '${name}'":
command => "pm2 start '${path}/pm2.json' --name '${name}'",
timeout => 0,
path => $::path,
user => $deamon_user,
environment => ["HOME=${install_root}/${install_dir}"],
group => $deamon_user,
cwd => "${path}/current",
require => File["${path}/current"]
}
}
|