Clark Boylan 31e44bbcb0 Allow multiple places to install curl
Curl is an important package that we end up needing in a few places. To
avoid puppet unique name conflicts with the package "curl" only define
the curl package resource if it isn't already defined.

This allows us to define it in multiple places that may or may not
overlap depending on how hosts are constructed.

Change-Id: Icd0c652ff2f522ce2ea9086965f53e1a03f0d4fd
2017-08-24 13:46:04 -07:00

130 lines
3.0 KiB
Puppet

# == Class: ethercalc
#
# Class to install ethercalc.
#
# To use ethercalc you will want the following includes:
# include ethercalc
# include ethercalc::redis # necessary to use mysql as the backend
# include ethercalc::site # configures ethercalc instance
# include ethercalc::apache # will add reverse proxy on localhost
# The defaults for all the classes should just work (tm)
#
#
class ethercalc (
$base_install_dir = '/opt/ethercalc',
$base_log_dir = '/var/log',
$ethercalc_user = 'ethercalc',
$ethercalc_version= '0.20161220.1',
# If set to system will install system package.
$nodejs_version = 'node_4.x',
) {
$path = '/usr/local/bin:/usr/bin:/bin'
group { $ethercalc_user:
ensure => present,
}
user { $ethercalc_user:
shell => '/usr/sbin/nologin',
home => $base_install_dir,
system => true,
gid => $ethercalc_user,
require => Group[$ethercalc_user],
}
file { $base_install_dir:
ensure => directory,
owner => $ethercalc_user,
group => $ethercalc_user,
mode => '0664',
}
if !defined(Package['curl']) {
package { 'curl':
ensure => present,
}
}
anchor { 'nodejs-package-install': }
if ($nodejs_version != 'system') {
class { '::nodejs':
repo_url_suffix => $nodejs_version,
before => Anchor['nodejs-package-install'],
}
} else {
package { ['nodejs', 'npm']:
ensure => present,
before => Anchor['nodejs-package-install'],
}
}
file { '/usr/local/bin/node':
ensure => link,
target => '/usr/bin/nodejs',
require => Anchor['nodejs-package-install'],
before => Anchor['nodejs-anchor'],
}
anchor { 'nodejs-anchor': }
exec { 'install-ethercalc':
command => "npm install ethercalc@${ethercalc_version}",
unless => "npm ls | grep ethercalc@${ethercalc_version}",
path => $path,
cwd => $base_install_dir,
require => Anchor['nodejs-anchor'],
}
file { '/etc/init/ethercalc.conf':
ensure => present,
content => template('ethercalc/upstart.erb'),
replace => true,
owner => 'root',
}
file { '/etc/init.d/ethercalc':
ensure => link,
target => '/lib/init/upstart-job',
}
file { "${base_log_dir}/${ethercalc_user}":
ensure => directory,
owner => $ethercalc_user,
}
service { 'ethercalc':
ensure => running,
enable => true,
require => File['/etc/init/ethercalc.conf'],
}
include ::logrotate
logrotate::file { 'ethercalc_error':
log => "${base_log_dir}/${ethercalc_user}/error.log",
options => [
'compress',
'copytruncate',
'missingok',
'rotate 7',
'daily',
'notifempty',
],
require => Service['ethercalc'],
}
logrotate::file { 'ethercalc_access':
log => "${base_log_dir}/${ethercalc_user}/access.log",
options => [
'compress',
'copytruncate',
'missingok',
'rotate 7',
'daily',
'notifempty',
],
require => Service['ethercalc'],
}
}