Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

This commit is contained in:
Laurent Destailleur 2014-07-15 23:28:58 +02:00
commit f096253a6d
405 changed files with 2140 additions and 1055 deletions

5
.gitignore vendored
View File

@ -17,7 +17,4 @@ doxygen_warnings.log
*.iml
Thumbs.db
# Vagrant generated files
.vagrant
/index.html
/phpmyadmin
/xhprof
.vagrant

View File

@ -37,7 +37,7 @@ For users:
- Fix: [ bug #1501 ] DEPLACEMENT_CREATE trigger do not intercept trigger action
- Fix: [ bug #1506, #1507 ] ECM trigger error problem
- Fix: [ bug #1469 ] Triggers CONTACT_MODIFY and CONTACT_DELETE duplicates error message
- New: [ task #1204 ] add a External reference to contract
For translators:
- Update language files.
@ -46,7 +46,10 @@ For developers:
- New: Add hook "searchAgendaFrom".
- New: Add trigger DON_UPDATE, DON_DELETE
- New: Add country iso code on 3 chars into table of countries.
- Qual: Removed hard coded rowid into data init of table llx_c_action_trigger.
- Qual: Removed hard coded rowid into data init of table llx_c_action_trigger.
- LINEBILL_DELETE, LINK_DELETE, ORDER_SUPPLIER_DELETE, RESOURCE_DELETE trigger called before SQL delete
- New: [ Task #1481 ] Add trigger BILL_SUPPLIER_UPDATE.
- New: [ Task #1495 ] Add trigger LINECONTRACT_CREATE.
WARNING: Following change may create regression for some external modules, but was necessary to make
Dolibarr better:
@ -162,6 +165,7 @@ removed. You must now use the 6 parameters way. See file modMyModule.class.php f
So check that return value is 0 to keep default standard behaviour after hook, or 1 to disable
default standard behaviour.
- Properties "civilite_id" were renamed into "civility_id".
- Remove add_photo_web() that is ot used anymore by core code.
@ -207,6 +211,8 @@ Fix: [ bug #1461 ] LINEORDER_SUPPLIER_CREATE does not intercept supplier order l
Fix: [ bug #1484 ] BILL_SUPPLIER_PAYED trigger action does not intercept failure under some circumstances
Fix: [ bug #1482 ] Several supplier invoice triggers do not show trigger error messages
Fix: [ bug #1486 ] LINEBILL_SUPPLIER_CREATE and LINEBILL_SUPPLIER_UPDATE triggers do not intercept trigger action
Fix: [ bug #1522 ] Element list into associate object into project are no more filterd by project thirdparty
Fix: Import ProfId1 to siren and ProfId2 to siret
***** ChangeLog for 3.5.3 compared to 3.5.2 *****
Fix: Error on field accountancy code for export profile of invoices.

View File

@ -23,7 +23,7 @@ Usage
`cd` into the vagrant box directory and simply type `vagrant up`.
That's all you need to do. It will build a brand new VirtalBox machine for you with everything you need to develop on Dolibarr.
That's all you need to do. It will build a brand new VirtualBox machine for you with everything you need to develop on Dolibarr.
### Name resolution
For easy access to the VM you need to setup name resolution to the machines IP.
@ -45,9 +45,16 @@ Somewhat bleeding edge vagrant box for develop branch related work.
- IP: 192.168.42.101
- Vhost: dev.dolibarr.org
- OS: Debian Wheezy 7.5
- OS: Debian Wheezy 7.5 x64
- Webserver: Apache 2.2.22
- PHP: mod_php 5.5.13-1~dotdeb.1
- PHP: mod_php 5.5.14-1~dotdeb.1
Installed modules:
- cli
- curl
- gd
- imagick
- intl
- mcrypt
- Database: MySQL 5.5
- Root user: root
- Root password: root
@ -55,7 +62,13 @@ Somewhat bleeding edge vagrant box for develop branch related work.
- Database user: user
- Database password: user
- Initial data: dev/initdata/mysqldump_dolibarr-3.5.0.sql
- Database: PostgreSQL 9.3
- Adminer: lightweight database management. Access through http://192.168.42.101/adminer
- Debugger: XDebug
- Profiler: Xhprof
- Profiler: Xhprof. Access through http://192.168.42.101/xhprof/xhprof_html
You can access MailCatcher to read all outgoing emails at http://192.168.42.101:1080
To access the machine you must use the following private keys:
- User root: located at puphpet/files/dot/ssh/root_rsa
- User vagrant: located at puphpet/files/dot/ssh/id_rsa

View File

@ -25,11 +25,19 @@ Vagrant.configure("2") do |config|
data['vm']['synced_folder'].each do |i, folder|
if folder['source'] != '' && folder['target'] != ''
nfs = (folder['nfs'] == "true") ? "nfs" : nil
if nfs == "nfs"
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: nfs
if folder['sync_type'] == 'nfs'
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: "nfs"
elsif folder['sync_type'] == 'smb'
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: "smb"
elsif folder['sync_type'] == 'rsync'
rsync_args = !folder['rsync']['args'].nil? ? folder['rsync']['args'] : ["--verbose", "--archive", "--delete", "-z"]
rsync_auto = !folder['rsync']['auto'].nil? ? folder['rsync']['auto'] : true
rsync_exclude = !folder['rsync']['exclude'].nil? ? folder['rsync']['exclude'] : [".vagrant/"]
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}",
rsync__args: rsync_args, rsync__exclude: rsync_exclude, rsync__auto: rsync_auto, type: "rsync"
else
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: nfs,
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}",
group: 'www-data', owner: 'www-data', mount_options: ["dmode=775", "fmode=764"]
end
end
@ -128,7 +136,14 @@ Vagrant.configure("2") do |config|
end
end
config.vm.provision :shell, :path => "puphpet/shell/execute-files.sh"
config.vm.provision :shell do |s|
s.path = "puphpet/shell/execute-files.sh"
s.args = ["exec-once", "exec-always"]
end
config.vm.provision :shell, run: "always" do |s|
s.path = "puphpet/shell/execute-files.sh"
s.args = ["startup-once", "startup-always"]
end
config.vm.provision :shell, :path => "puphpet/shell/important-notices.sh"
if File.file?("#{dir}/puphpet/files/dot/ssh/id_rsa")

View File

@ -29,10 +29,12 @@ vagrantfile-local:
- '--hiera_config /vagrant/puphpet/puppet/hiera.yaml'
- '--parser future'
synced_folder:
PL1BkioqqvGY:
jopH6005bn96:
source: ../../../
target: /var/www
nfs: 'false'
target: /var/www/dolibarr
sync_type: default
rsync:
auto: 'false'
usable_port_range: 2200..2250
ssh:
host: null
@ -71,7 +73,7 @@ apache:
settings:
user: www-data
group: www-data
default_vhost: false
default_vhost: true
manage_user: false
manage_group: false
sendfile: 0
@ -79,9 +81,9 @@ apache:
- php
- rewrite
vhosts:
CGyWQB0fx4x0:
b2tOrs1TMtoF:
servername: dev.dolibarr.org
docroot: /var/www/htdocs
docroot: /var/www/dolibarr/htdocs
port: '80'
setenv:
- 'APP_ENV dev'
@ -97,7 +99,7 @@ apache:
nginx:
install: 0
vhosts:
jeF1sybIJ3V2:
0dU5luf5AnIe:
server_name: awesome.dev
server_aliases:
- www.awesome.dev
@ -152,7 +154,7 @@ mysql:
root_password: root
adminer: 0
databases:
2OfuuapoIqsl:
V6H3W2FVB7Yq:
grant:
- ALTER
- CREATE
@ -166,16 +168,16 @@ mysql:
host: localhost
user: user
password: user
sql_file: /var/www/dev/initdata/mysqldump_dolibarr_3.5.0.sql
sql_file: /var/www/dolibarr/dev/initdata/mysqldump_dolibarr_3.5.0.sql
postgresql:
install: 0
install: '1'
settings:
root_password: '123'
root_password: root
user_group: postgres
encoding: UTF8
version: '9.3'
databases: { }
adminer: 0
adminer: '1'
mariadb:
install: 0
root_password: '123'

View File

@ -1,4 +1 @@
ssh/id_rsa
ssh/id_rsa.pub
ssh/insecure_private_key
ssh/id_rsa.ppk
ssh/*

View File

@ -279,8 +279,14 @@ if hash_key_equals($mailcatcher_values, 'install', 1) {
}
if ! defined(Class['supervisord']) {
class{ 'puphpet::python::pip': }
class { 'supervisord':
install_pip => true,
install_pip => false,
require => [
Class['my_fw::post'],
Class['Puphpet::Python::Pip'],
],
}
}
@ -467,15 +473,16 @@ if hash_key_equals($apache_values, 'install', 1) {
$apache_vhosts = merge($apache_values['vhosts'], {
'default_vhost_80' => {
'servername' => 'default',
'serveraliases' => ['*'],
'docroot' => '/var/www/default',
'port' => 80,
'default_vhost' => true,
},
'default_vhost_443' => {
'servername' => 'default',
'serveraliases' => ['*'],
'docroot' => '/var/www/default',
'port' => 443,
'default_vhost' => true,
'ssl' => 1,
},
})
} else {
@ -515,11 +522,11 @@ if hash_key_equals($apache_values, 'install', 1) {
create_resources(apache::vhost, { "${key}" => merge($vhost, {
'custom_fragment' => template('puphpet/apache/custom_fragment.erb'),
'ssl' => 'ssl' in $vhost and str2bool($vhost['ssl']) ? { true => true, default => false },
'ssl_cert' => 'ssl_cert' in $vhost and $vhost['ssl_cert'] ? { undef => undef, '' => undef, default => $vhost['ssl_cert'] },
'ssl_key' => 'ssl_key' in $vhost and $vhost['ssl_key'] ? { undef => undef, '' => undef, default => $vhost['ssl_key'] },
'ssl_chain' => 'ssl_chain' in $vhost and $vhost['ssl_chain'] ? { undef => undef, '' => undef, default => $vhost['ssl_chain'] },
'ssl_certs_dir' => 'ssl_certs_dir' in $vhost and $vhost['ssl_certs_dir'] ? { undef => undef, '' => undef, default => $vhost['ssl_certs_dir'] }
'ssl' => 'ssl' in $vhost and str2bool($vhost['ssl']) ? { true => true, default => false },
'ssl_cert' => hash_key_true($vhost, 'ssl_cert') ? { true => $vhost['ssl_cert'], default => undef },
'ssl_key' => hash_key_true($vhost, 'ssl_cert') ? { true => $vhost['ssl_key'], default => undef },
'ssl_chain' => hash_key_true($vhost, 'ssl_cert') ? { true => $vhost['ssl_chain'], default => undef },
'ssl_certs_dir' => hash_key_true($vhost, 'ssl_cert') ? { true => $vhost['ssl_certs_dir'], default => undef }
})
})
@ -662,10 +669,6 @@ if hash_key_equals($nginx_values, 'install', 1) {
}
} elsif hash_key_equals($hhvm_values, 'install', 1) {
$fastcgi_pass = '127.0.0.1:9000'
set_php5_fpm_sock_group_and_user { 'hhvm':
require => Package['nginx'],
}
} else {
$fastcgi_pass = ''
}
@ -1096,7 +1099,7 @@ if hash_key_equals($xhprof_values, 'install', 1)
}
if hash_key_equals($apache_values, 'install', 1) {
$xhprof_webroot_location = $puphpet::params::apache_webroot_location
$xhprof_webroot_location = '/var/www/default'
$xhprof_webserver_service = 'httpd'
} elsif hash_key_equals($nginx_values, 'install', 1) {
$xhprof_webroot_location = $puphpet::params::nginx_webroot_location
@ -1216,11 +1219,11 @@ if hash_key_equals($mysql_values, 'install', 1) {
if hash_key_equals($mysql_values, 'adminer', 1) and $mysql_php_installed {
if hash_key_equals($apache_values, 'install', 1) {
$mysql_adminer_webroot_location = $puphpet::params::apache_webroot_location
$mysql_adminer_webroot_location = '/var/www/default'
} elsif hash_key_equals($nginx_values, 'install', 1) {
$mysql_adminer_webroot_location = $puphpet::params::nginx_webroot_location
} else {
$mysql_adminer_webroot_location = $puphpet::params::apache_webroot_location
$mysql_adminer_webroot_location = '/var/www/default'
}
class { 'puphpet::adminer':
@ -1329,11 +1332,11 @@ if hash_key_equals($postgresql_values, 'install', 1) {
if hash_key_equals($postgresql_values, 'adminer', 1) and $postgresql_php_installed {
if hash_key_equals($apache_values, 'install', 1) {
$postgresql_adminer_webroot_location = $puphpet::params::apache_webroot_location
$postgresql_adminer_webroot_location = '/var/www/default'
} elsif hash_key_equals($nginx_values, 'install', 1) {
$postgresql_adminer_webroot_location = $puphpet::params::nginx_webroot_location
} else {
$postgresql_adminer_webroot_location = $puphpet::params::apache_webroot_location
$postgresql_adminer_webroot_location = '/var/www/default'
}
class { 'puphpet::adminer':
@ -1364,7 +1367,7 @@ define postgresql_db (
$table = "${name}.*"
exec{ "${name}-import":
command => "psql ${name} < ${sql_file}",
command => "sudo -u postgres psql ${name} < ${sql_file}",
logoutput => true,
refreshonly => $refresh,
require => Postgresql::Server::Db[$name],
@ -1491,11 +1494,11 @@ if hash_key_equals($mariadb_values, 'install', 1) {
if hash_key_equals($mariadb_values, 'adminer', 1) and $mariadb_php_installed {
if hash_key_equals($apache_values, 'install', 1) {
$mariadb_adminer_webroot_location = $puphpet::params::apache_webroot_location
$mariadb_adminer_webroot_location = '/var/www/default'
} elsif hash_key_equals($nginx_values, 'install', 1) {
$mariadb_adminer_webroot_location = $puphpet::params::nginx_webroot_location
} else {
$mariadb_adminer_webroot_location = $puphpet::params::apache_webroot_location
$mariadb_adminer_webroot_location = '/var/www/default'
}
class { 'puphpet::adminer':
@ -1662,7 +1665,7 @@ if $beanstalkd_values == undef {
}
if hash_key_equals($apache_values, 'install', 1) {
$beanstalk_console_webroot_location = "${puphpet::params::apache_webroot_location}/beanstalk_console"
$beanstalk_console_webroot_location = '/var/www/default/beanstalk_console'
} elsif hash_key_equals($nginx_values, 'install', 1) {
$beanstalk_console_webroot_location = "${puphpet::params::nginx_webroot_location}/beanstalk_console"
} else {

View File

@ -0,0 +1,42 @@
#
# hash_key_true.rb
#
module Puppet::Parser::Functions
newfunction(:hash_key_true, :type => :rvalue, :doc => <<-'ENDHEREDOC') do |args|
Returns true if the key within hash is truthy
ENDHEREDOC
unless args.length == 2
raise Puppet::ParseError, ("hash_key_true(): wrong number of arguments (#{args.length}; must be 2)")
end
arr = args[0]
key = args[1]
unless arr.is_a?(Hash)
return false
end
unless arr.has_key?(key)
return false
end
if arr[key].nil?
return false
end
if arr[key].empty?
return false
end
if arr[key] == 'false'
return false
end
return true
end
end

View File

@ -69,17 +69,39 @@ class puphpet::hhvm(
}
}
'centos': {
$jemalloc_url = 'http://files.puphpet.com/centos6/jemalloc-3.6.0-1.el6.x86_64.rpm'
$jemalloc_download_location = '/.puphpet-stuff/jemalloc-3.6.0-1.el6.x86_64.rpm'
$require = defined(Class['my_fw::post']) ? {
true => Class['my_fw::post'],
default => [],
}
exec { "download jemalloc to ${download_location}":
creates => $download_location,
command => "wget --quiet --tries=5 --connect-timeout=10 -O '${jemalloc_download_location}' '${jemalloc_url}'",
timeout => 30,
path => '/usr/bin',
require => $require
}
package { 'jemalloc':
ensure => latest,
provider => yum,
source => $download_location,
require => Exec["download jemalloc to ${download_location}"],
}
yum::managed_yumrepo { 'hop5':
descr => 'hop5 repository',
baseurl => 'http://www.hop5.in/yum/el6/',
gpgkey => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-HOP5',
enabled => 1,
gpgcheck => 0,
priority => 1
priority => 1,
}
}
}
if $real_webserver == 'apache2' {
if ! defined(Class['apache::mod::mime']) {
class { 'apache::mod::mime': }

View File

@ -0,0 +1,22 @@
class puphpet::python::pip {
Exec { path => [ '/usr/bin/', '/usr/local/bin', '/bin', '/usr/local/sbin', '/usr/sbin', '/sbin' ] }
if ! defined(Package['python-setuptools']) {
package { 'python-setuptools': }
}
exec { 'easy_install pip':
unless => 'which pip',
require => Package['python-setuptools'],
}
if $::osfamily == 'RedHat' {
exec { 'rhel pip_provider_name_fix':
command => 'alternatives --install /usr/bin/pip-python pip-python /usr/bin/pip 1',
subscribe => Exec['easy_install pip'],
unless => 'which pip-python',
}
}
}

View File

@ -1,6 +1,10 @@
fixtures:
repositories:
stdlib: "git://github.com/puppetlabs/puppetlabs-stdlib"
concat: "git://github.com/puppetlabs/puppetlabs-concat"
'stdlib':
repo: 'git://github.com/puppetlabs/puppetlabs-stdlib'
ref: '4.1.0'
'concat':
repo: 'git://github.com/puppetlabs/puppetlabs-concat'
ref: '1.0.1'
symlinks:
supervisord: "#{source_dir}"

View File

@ -1,21 +1,28 @@
language: ruby
bundler_args: --without development
script: "bundle exec rake spec lint"
script: "bundle exec rake test"
rvm:
- 1.8.7
- 1.9.3
- 2.0.0
env:
matrix:
- PUPPET_GEM_VERSION="~> 2.7.0"
- PUPPET_GEM_VERSION="~> 3.3.0"
- PUPPET_GEM_VERSION="~> 3.4.0"
- PUPPET_VERSION="~> 2.7.0"
- PUPPET_VERSION="~> 3.1.0"
- PUPPET_VERSION="~> 3.2.0"
- PUPPET_VERSION="~> 3.3.0"
- PUPPET_VERSION="~> 3.4.0"
- PUPPET_VERSION="~> 3.5.0"
- PUPPET_VERSION="~> 3.6.0"
matrix:
exclude:
- rvm: 1.9.3
env: PUPPET_GEM_VERSION="~> 2.7.0"
- rvm: 2.0.0
env: PUPPET_GEM_VERSION="~> 2.7.0"
env: PUPPET_VERSION="~> 2.7.0"
- rvm: 1.9.3
env: PUPPET_VERSION="~> 2.7.0"
- rvm: 2.0.0
env: PUPPET_VERSION="~> 3.1.0"
- rvm: 1.8.7
env: PUPPET_VERSION="~> 3.2.0"
notifications:
email: false

View File

@ -1,3 +1,66 @@
2014-06-20 - v0.4.0
Fixes:
- Removed root as group and replaced with uid 0 to enhance system
compatibility
Enhancements:
- Made package provider a user definable param see supervisord::package_provider and README for details of how to change this.
- All define types can now be automatically pulled in from hiera see example https://github.com/ajcrowe/puppet-supervisord#configure-a-program
- You can now override the default include path of $config_include/*.conf with your own array using $config_dirs. Bear in mind this would need to include whatever you set $config_include to be, with *.conf on the end.
Many thanks for the PRs from @jasperla, @mvantellingen for the bug report on the service name and @hasc for the enhancement ideas.
2014-06-06 - v0.3.3
Fixes:
- Fixed typo in stopwaitsec param, should have been stopwaitsecs, thanks to @rchrd2
2014-05-03 - v0.3.2
Changes:
- Added supervisord::executable_ctl variable for supervisorctl binary path, thanks to @bpgoldsb
2014-04-22 - v0.3.1
Fixes:
- Fixed typo in unix_socket_group param, thanks to @dig412
2014-03-11 - v0.3.0
Fixes:
- Fixed typo in fcgi config
- Fixed typo in supervisord config with minfds and minprocs, thanks to @peefourtee
- Typo in README fixed thanks to @hopkinsth
- Removed refreshonly from pip_install exec resource
- Number of syntax fixes thanks to `puppet lint`
Important Changes:
- Lots of input validation has been added **PLEASE** check your config works before upgrading!
- Changed init_extras naming to defaults and cleaned things up.
- Starting and stopping apps is now done with supervisorctl commands to avoid service restarts
Other Changes:
- CSV functions now order things consistently
- Included description for classes and functions
- Expanded spec testing built with Travis CI
- Added beaker acceptance tests
- Added greater validation of various parameters
- Added coverage reporting for resources
To-Do:
- Add support for additional OS families such as Solaris.
2013-10-31 - v0.2.3
Fixes:

View File

@ -1,14 +1,26 @@
source 'https://rubygems.org'
group :development, :test do
group :test do
gem 'rake'
gem 'puppetlabs_spec_helper', :require => false
gem 'rspec-system-puppet', '~> 2.0'
gem 'puppet-lint', '~> 0.3.2'
gem 'puppet-lint'
gem 'puppet-syntax'
gem 'puppetlabs_spec_helper'
gem 'rspec-puppet', :git => 'https://github.com/rodjek/rspec-puppet.git' , :ref => 'c44381a240ec420d4ffda7bffc55ee4d9c08d682'
gem 'rspec', '2.14.1'
end
if puppetversion = ENV['PUPPET_GEM_VERSION']
gem 'puppet', puppetversion, :require => false
else
gem 'puppet', :require => false
group :development do
gem 'travis'
gem 'travis-lint'
gem 'beaker'
gem 'beaker-rspec'
gem 'pry'
gem 'guard-rake'
end
if puppetversion = ENV['PUPPET_VERSION']
gem 'puppet', puppetversion
else
gem 'puppet', '~> 3.4.0'
end

View File

@ -1,5 +1,5 @@
name 'ajcrowe-supervisord'
version '0.2.3'
version '0.4.0'
source 'git@github.com/ajcrowe/puppet-supervisord.git'
author 'Alex Crowe'
license 'Apache License, Version 2.0'

View File

@ -4,7 +4,7 @@
Puppet module to manage the [supervisord](http://supervisord.org/) process control system.
Functions available to configure
Functions available to configure
* [programs](http://supervisord.org/configuration.html#program-x-section-settings)
* [groups](http://supervisord.org/configuration.html#group-x-section-settings)
@ -31,10 +31,16 @@ class supervisord {
}
```
This will download [setuptool](https://bitbucket.org/pypa/setuptools) and install pip with easy_install.
This will download [setuptool](https://bitbucket.org/pypa/setuptools) and install pip with easy_install.
You can pass a specific url with `$setuptools_url = 'url'`
### Install without pip
If you want to use your system package manager you can specify that with `supervisord::package_provider`.
You'll also likely need to adjust the `supervisord::service_name` to match that installed by the system package. If you're using Debian or Redhat OS families you'll also want to disable the init scripts with `supervisord::install_init = false`.
Note: Only Debian and RedHat families have an init script currently.
### Configure a program
@ -61,23 +67,61 @@ supervisord::program { 'myprogram':
}
```
Or you can fully define your programs in hiera:
```yaml
supervisord::programs:
'myprogram':
command: 'command --args'
autostart: yes
autorestart: 'true'
environment:
HOME: '/home/myuser'
PATH: '/bin:/sbin:/usr/bin:/usr/sbin'
SECRET: 'mysecret'
```
### Configure a group
```ruby
supervisord::group { 'mygroup':
priority => 100,
program => ['program1', 'program2', 'program3']
programs => ['program1', 'program2', 'program3']
}
```
### Configure an eventlistener
```ruby
supervisord::eventlistener { 'mylistener':
command => 'command --args',
events => ['PROCESS_STATE', 'PROCESS_STATE_START']
priority => '100',
env_var => 'my_common_envs'
}
```
### Run supervisorctl Commands
Should you need to run a sequence of command with `supervisorctl` you can use the define type `supervisord::supervisorctl`
```ruby
supervisord::supervisorctl { 'restart_myapp':
command => 'restart',
process => 'myapp'
}
```
You can also issue a command without specifying a process.
### Development
If you have suggestions or improvements please file an issue or pull request, i'll try and sort them as quickly as possble.
If you submit a pull please try and include tests for the new functionality. The module is tested with [Travis-CI](https://travis-ci.org/ajcrowe/puppet-supervisord).
If you submit a pull please try and include tests for the new functionality/fix. The module is tested with [Travis-CI](https://travis-ci.org/ajcrowe/puppet-supervisord).
### Credits
* Debian init script sourced from the system package.
* RedHat/Centos init script sourced from https://github.com/Supervisor/initscripts
* RedHat/Centos init script sourced from https://github.com/Supervisor/initscripts

View File

@ -1,7 +1,28 @@
require 'puppetlabs_spec_helper/rake_tasks'
require 'puppet-lint/tasks/puppet-lint'
require 'rspec-system/rake_task'
require 'puppet-syntax/tasks/puppet-syntax'
PuppetLint.configuration.send('disable_80chars')
PuppetLint.configuration.send('disable_class_inherits_from_params_class')
PuppetLint.configuration.send('disable_documentation')
PuppetLint.configuration.send('disable_quoted_booleans')
PuppetLint.configuration.send('disable_autoloader_layout')
exclude_paths = [
"pkg/**/*",
"vendor/**/*",
"spec/**/*",
]
PuppetLint.configuration.ignore_paths = exclude_paths
PuppetSyntax.exclude_paths = exclude_paths
desc "Acceptance Tests"
RSpec::Core::RakeTask.new(:acceptance) do |t|
t.pattern = 'spec/acceptance'
end
desc "Test Suite"
task :test => [
:lint,
:syntax,
:spec
]

View File

@ -1,14 +1,12 @@
#
# Converts the array to a csv string
#
#
# $array = [ 'string1', 'string2', 'string3' ]
#
# becomes:
#
# $string = "string1,string2,string3"
#
module Puppet::Parser::Functions
newfunction(:array2csv, :type => :rvalue, :doc => <<-'EOS'
Returns a sorted csv formatted string from an array in the form

View File

@ -1,7 +1,6 @@
#
# Converts the hash to a csv string
#
#
# $hash = {
# HOME => '/home/user',
# ENV1 => 'env1',
@ -12,7 +11,6 @@
#
# $string = "HOME='/home/user',ENV1='env1',SECRET='secret'"
#
module Puppet::Parser::Functions
newfunction(:hash2csv, :type => :rvalue, :doc => <<-'EOS'
Returns a csv formatted string from an hash in the form

View File

@ -1,6 +1,16 @@
# Class: supervisord::config
#
# Configuration class for supervisor init and conf directories
#
class supervisord::config inherits supervisord {
file { [ "${supervisord::config_include}", "${supervisord::log_path}"]:
file { $supervisord::config_include:
ensure => directory,
owner => 'root',
mode => '0755'
}
file { $supervisord::log_path:
ensure => directory,
owner => 'root',
mode => '0755'
@ -15,30 +25,26 @@ class supervisord::config inherits supervisord {
}
if $supervisord::install_init {
$osname = downcase($::osfamily)
file { '/etc/init.d/supervisord':
ensure => present,
owner => 'root',
mode => '0755',
content => template("supervisord/init/${osname}_init.erb")
content => template("supervisord/init/${::osfamily}/init.erb")
}
if $supervisord::init_extras {
file { $supervisord::init_extras:
if $supervisord::init_defaults {
file { $supervisord::init_defaults:
ensure => present,
owner => 'root',
mode => '0755',
content => template("supervisord/init/${osname}_extra.erb")
content => template("supervisord/init/${::osfamily}/defaults.erb")
}
}
}
concat { $supervisord::config_file:
owner => 'root',
group => 'root',
group => '0',
mode => '0755'
}

View File

@ -1,8 +1,16 @@
# Define: supervisord::eventlistener
#
# This define creates an eventlistener configuration file
#
# Documentation on parameters available at:
# http://supervisord.org/configuration.html#eventlistener-x-section-settings
#
define supervisord::eventlistener(
$command,
$ensure = present,
$ensure_process = 'running',
$buffer_size = 10,
$events = undef,
$buffer_size = undef,
$result_handler = undef,
$env_var = undef,
$process_name = undef,
@ -15,16 +23,16 @@ define supervisord::eventlistener(
$startretries = undef,
$exitcodes = undef,
$stopsignal = undef,
$stopwaitsec = undef,
$stopwaitsecs = undef,
$stopasgroup = undef,
$killasgroup = undef,
$user = undef,
$redirect_stderr = undef,
$stdout_logfile = "${supervisord::log_path}/eventlistener_${name}.log",
$stdout_logfile = "eventlistener_${name}.log",
$stdout_logfile_maxbytes = undef,
$stdout_logfile_backups = undef,
$stdout_events_enabled = undef,
$stderr_logfile = "${supervisord::log_path}/eventlistener_${name}.error",
$stderr_logfile = "eventlistener_${name}.error",
$stderr_logfile_maxbytes = undef,
$stderr_logfile_backups = undef,
$stderr_events_enabled = undef,
@ -36,11 +44,45 @@ define supervisord::eventlistener(
include supervisord
# parameter validation
validate_string($command)
validate_re($ensure_process, ['running', 'stopped', 'removed'])
validate_re($buffer_size, '^\d+')
if $events { validate_array($events) }
if $result_handler { validate_string($result_handler) }
if $numprocs { validate_re($numprocs, '^\d+')}
if $numprocs_start { validate_re($numprocs_start, '^\d+')}
if $priority { validate_re($priority, '^\d+') }
if $autostart { validate_bool($autostart) }
if $autorestart { validate_re($autorestart, ['true', 'false', 'unexpected']) }
if $startsecs { validate_re($startsecs, '^\d+')}
if $startretries { validate_re($startretries, '^\d+')}
if $exitcodes { validate_string($exitcodes)}
if $stopsignal { validate_re($stopsignal, ['TERM', 'HUP', 'INT', 'QUIT', 'KILL', 'USR1', 'USR2']) }
if $stopwaitsecs { validate_re($stopwaitsecs, '^\d+')}
if $stopasgroup { validate_bool($stopasgroup) }
if $killasgroup { validate_bool($killasgroup) }
if $user { validate_string($user) }
if $redirect_stderr { validate_bool($redirect_stderr) }
validate_string($stdout_logfile)
if $stdout_logfile_maxbytes { validate_string($stdout_logfile_maxbytes) }
if $stdout_logfile_backups { validate_re($stdout_logfile_backups, '^\d+')}
if $stdout_events_enabled { validate_bool($stdout_events_enabled) }
validate_string($stderr_logfile)
if $stderr_logfile_maxbytes { validate_string($stderr_logfile_maxbytes) }
if $stderr_logfile_backups { validate_re($stderr_logfile_backups, '^\d+')}
if $stderr_events_enabled { validate_bool($stderr_events_enabled) }
if $directory { validate_absolute_path($directory) }
if $umask { validate_re($umask, '^[0-7][0-7][0-7]$') }
# convert environment data into a csv
if $env_var {
$env_hash = hiera($env_var)
$env_hash = hiera_hash($env_var)
validate_hash($env_hash)
$env_string = hash2csv($env_hash)
}
elsif $environment {
validate_hash($environment)
$env_string = hash2csv($environment)
}
@ -55,6 +97,22 @@ define supervisord::eventlistener(
owner => 'root',
mode => '0755',
content => template('supervisord/conf/eventlistener.erb'),
notify => Class['supervisord::service']
notify => Class['supervisord::reload']
}
case $ensure_process {
'stopped': {
supervisord::supervisorctl { "stop_${name}":
command => 'stop',
process => $name
}
}
'removed': {
supervisord::supervisorctl { "remove_${name}":
command => 'remove',
process => $name
}
}
default: { }
}
}

View File

@ -1,7 +1,15 @@
# Define: supervisord::fcgi_program
#
# This define creates an eventlistener configuration file
#
# Documentation on parameters available at:
# http://supervisord.org/configuration.html#fcgi-program-x-section-settings
#
define supervisord::fcgi_program(
$command,
$socket,
$ensure = present,
$ensure_process = 'running',
$socket_owner = undef,
$socket_mode = undef,
$env_var = undef,
@ -15,17 +23,17 @@ define supervisord::fcgi_program(
$startretries = undef,
$exitcodes = undef,
$stopsignal = undef,
$stopwaitsec = undef,
$stopwaitsecs = undef,
$stopasgroup = undef,
$killasgroup = undef,
$user = undef,
$redirect_stderr = undef,
$stdout_logfile = "${supervisord::log_path}/fcgi-program_${name}.log",
$stdout_logfile = "fcgi-program_${name}.log",
$stdout_logfile_maxbytes = undef,
$stdout_logfile_backups = undef,
$stdout_capture_maxbytes = undef,
$stdout_events_enabled = undef,
$stderr_logfile = "${supervisord::log_path}/fcgi-program_${name}.error",
$stderr_logfile = "fcgi-program_${name}.error",
$stderr_logfile_maxbytes = undef,
$stderr_logfile_backups = undef,
$stderr_capture_maxbytes = undef,
@ -38,11 +46,46 @@ define supervisord::fcgi_program(
include supervisord
# parameter validation
validate_string($command)
validate_re($ensure_process, ['running', 'stopped', 'removed'])
validate_re($socket, ['^tcp:\/\/.*:\d+$', '^unix:\/\/\/'])
if $process_name { validate_string($process_name) }
if $numprocs { validate_re($numprocs, '^\d+')}
if $numprocs_start { validate_re($numprocs_start, '^\d+')}
if $priority { validate_re($priority, '^\d+') }
if $autostart { validate_bool($autostart) }
if $autorestart { validate_re($autorestart, ['true', 'false', 'unexpected']) }
if $startsecs { validate_re($startsecs, '^\d+')}
if $startretries { validate_re($startretries, '^\d+')}
if $exitcodes { validate_string($exitcodes)}
if $stopsignal { validate_re($stopsignal, ['TERM', 'HUP', 'INT', 'QUIT', 'KILL', 'USR1', 'USR2']) }
if $stopwaitsecs { validate_re($stopwaitsecs, '^\d+')}
if $stopasgroup { validate_bool($stopasgroup) }
if $killasgroup { validate_bool($killasgroup) }
if $user { validate_string($user) }
if $redirect_stderr { validate_bool($redirect_stderr) }
validate_string($stdout_logfile)
if $stdout_logfile_maxbytes { validate_string($stdout_logfile_maxbytes) }
if $stdout_logfile_backups { validate_re($stdout_logfile_backups, '^\d+')}
if $stdout_capture_maxbytes { validate_string($stdout_capture_maxbytes) }
if $stdout_events_enabled { validate_bool($stdout_events_enabled) }
validate_string($stderr_logfile)
if $stderr_logfile_maxbytes { validate_string($stderr_logfile_maxbytes) }
if $stderr_logfile_backups { validate_re($stderr_logfile_backups, '^\d+')}
if $stderr_capture_maxbytes { validate_string($stderr_capture_maxbytes) }
if $stderr_events_enabled { validate_bool($stderr_events_enabled) }
if $directory { validate_absolute_path($directory) }
if $umask { validate_re($umask, '^[0-7][0-7][0-7]$') }
# convert environment data into a csv
if $env_var {
$env_hash = hiera($env_var)
$env_hash = hiera_hash($env_var)
validate_hash($env_hash)
$env_string = hash2csv($env_hash)
}
elsif $environment {
validate_hash($environment)
$env_string = hash2csv($environment)
}
@ -53,6 +96,22 @@ define supervisord::fcgi_program(
owner => 'root',
mode => '0755',
content => template('supervisord/conf/fcgi_program.erb'),
notify => Class['supervisord::service']
notify => Class['supervisord::reload']
}
case $ensure_process {
'stopped': {
supervisord::supervisorctl { "stop_${name}":
command => 'stop',
process => $name
}
}
'removed': {
supervisord::supervisorctl { "remove_${name}":
command => 'remove',
process => $name
}
}
default: { }
}
}

View File

@ -1,3 +1,10 @@
# Define: supervisord::group
#
# This define creates an group configuration file
#
# Documentation on parameters available at:
# http://supervisord.org/configuration.html#group-x-section-settings
#
define supervisord::group (
$programs,
$ensure = present,
@ -6,6 +13,10 @@ define supervisord::group (
include supervisord
# parameter validation
validate_array($programs)
if $priority { validate_re($priority, '^\d+', "invalid priority value of: ${priority}") }
$progstring = array2csv($programs)
$conf = "${supervisord::config_include}/group_${name}.conf"
@ -13,6 +24,7 @@ define supervisord::group (
ensure => $ensure,
owner => 'root',
mode => '0755',
content => template('supervisord/conf/group.erb')
content => template('supervisord/conf/group.erb'),
notify => Class['supervisord::reload']
}
}

View File

@ -1,12 +1,18 @@
# This class installs supervisord and configured it to run on boot
# Class: supervisord
#
# This class installs supervisord via pip
#
class supervisord(
$package_ensure = $supervisord::params::package_ensure,
$package_provider = $supervisord::params::package_provider,
$service_ensure = $supervisord::params::service_ensure,
$service_name = $supervisord::params::service_name,
$install_init = $supervisord::params::install_init,
$install_pip = false,
$init_extras = $supervisord::params::init_extras,
$init_defaults = $supervisord::params::init_defaults,
$setuptools_url = $supervisord::params::setuptools_url,
$executable = $supervisord::params::executable,
$executable_ctl = $supervisord::params::executable_ctl,
$log_path = $supervisord::params::log_path,
$log_file = $supervisord::params::log_file,
@ -19,20 +25,20 @@ class supervisord(
$nodaemon = $supervisord::params::nodaemon,
$minfds = $supervisord::params::minfds,
$minprocs = $supervisord::params::minprocs,
$config_path = $supervisord::params::config_path,
$config_include = $supervisord::params::config_include,
$config_file = $supervisord::params::config_file,
$config_dirs = undef,
$umask = $supervisord::params::umask,
$unix_socket = $supervisord::params::unix_socket,
$unix_socket_file = $supervisord::params::unix_socket_file,
$unix_socket_mode = $supervisord::params::unix_socket_mode,
$unix_socket_owner = $supervisord::params::unix_socket_owner,
$unix_scoket_group = $supervisord::params::unix_socket_group,
$unix_socket_group = $supervisord::params::unix_socket_group,
$inet_server = $supervisord::params::inet_server,
$inet_server_hostname = $supervisord::params::inet_hostname,
$inet_server_port = $supervisord::params::inet_port,
$inet_server_hostname = $supervisord::params::inet_server_hostname,
$inet_server_port = $supervisord::params::inet_server_port,
$unix_auth = false,
$unix_username = undef,
@ -47,26 +53,76 @@ class supervisord(
$childlogdir = undef,
$environment = undef,
$env_var = undef,
$directory = undef,
$strip_ansi = false,
$nocleanup = false
$nocleanup = false,
$eventlisteners = {},
$fcgi_programs = {},
$groups = {},
$programs = {}
) inherits supervisord::params {
validate_bool($install_pip)
validate_bool($install_init)
validate_bool($nodaemon)
validate_bool($unix_auth)
validate_bool($inet_auth)
validate_bool($strip_ansi)
validate_bool($nocleanup)
validate_hash($eventlisteners)
validate_hash($fcgi_programs)
validate_hash($groups)
validate_hash($programs)
validate_absolute_path($config_include)
validate_absolute_path($log_path)
validate_absolute_path($run_path)
if $childlogdir { validate_absolute_path($childlogdir) }
if $directory { validate_absolute_path($directory) }
$log_levels = ['^critical$', '^error$', '^warn$', '^info$', '^debug$', '^trace$', '^blather$']
validate_re($log_level, $log_levels, "invalid log_level: ${log_level}")
validate_re($umask, '^0[0-7][0-7]$', "invalid umask: ${umask}.")
validate_re($unix_socket_mode, '^[0-7][0-7][0-7][0-7]$', "invalid unix_socket_mode: ${unix_socket_mode}")
if ! is_integer($logfile_backups) { fail("invalid logfile_backups: ${logfile_backups}.")}
if ! is_integer($minfds) { fail("invalid minfds: ${minfds}.")}
if ! is_integer($minprocs) { fail("invalid minprocs: ${minprocs}.")}
if ! is_integer($inet_server_port) { fail("invalid inet_server_port: ${inet_server_port}.")}
if $env_var {
validate_hash($env_var)
$env_hash = hiera($env_var)
$env_string = hash2csv($env_hash)
}
elsif $environment {
validate_hash($environment)
$env_string = hash2csv($environment)
}
if $config_dirs {
validate_array($config_dirs)
$config_include_string = join($config_dirs, " ")
}
else {
$config_include_string = "${config_include}/*.conf"
}
create_resources('supervisord::eventlistener', $eventlisteners)
create_resources('supervisord::fcgi_program', $fcgi_programs)
create_resources('supervisord::group', $groups)
create_resources('supervisord::program', $programs)
if $install_pip {
include supervisord::pip
Class['supervisord::pip'] -> Class['supervisord::install']
}
include supervisord::install, supervisord::config, supervisord::service
include supervisord::install, supervisord::config, supervisord::service, supervisord::reload
Class['supervisord::install'] -> Class['supervisord::config'] ~> Class['supervisord::service']
Class['supervisord::reload'] -> Supervisord::Supervisorctl <| |>
}

View File

@ -1,6 +1,10 @@
# Class supervisord::install
#
# Installs supervisor package (defaults to using pip)
#
class supervisord::install inherits supervisord {
package { 'supervisor':
ensure => $supervisord::package_ensure,
provider => 'pip'
provider => $supervisord::package_provider
}
}

View File

@ -1,13 +1,21 @@
# Class: supervisord::params
#
# Default parameters for supervisord
#
class supervisord::params {
# default supervisord params
$package_ensure = 'installed'
$package_provider = 'pip'
$service_ensure = 'running'
$service_name = 'supervisord'
$package_name = 'supervisor'
$executable = '/usr/local/bin/supervisord'
$executable = 'supervisord'
$executable_ctl = 'supervisorctl'
$run_path = '/var/run'
$pid_file = "${run_path}/supervisord.pid"
$pid_file = 'supervisord.pid'
$log_path = '/var/log/supervisor'
$log_file = "${log_path}/supervisord.log"
$log_file = 'supervisord.log'
$logfile_maxbytes = '50MB'
$logfile_backups = '10'
$log_level = 'info'
@ -20,7 +28,7 @@ class supervisord::params {
$setuptools_url = 'https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py'
$unix_socket = true
$unix_socket_file = "${run_path}/supervisor.sock"
$unix_socket_file = 'supervisor.sock'
$unix_socket_mode = '0700'
$unix_socket_owner = 'nobody'
@ -31,17 +39,17 @@ class supervisord::params {
case $::osfamily {
'RedHat': {
$init_extras = '/etc/sysconfig/supervisord'
$init_defaults = '/etc/sysconfig/supervisord'
$unix_socket_group = 'nobody'
$install_init = true
}
'Debian': {
$init_extras = '/etc/default/supervisor'
$init_defaults = '/etc/default/supervisor'
$unix_socket_group = 'nogroup'
$install_init = true
}
default: {
$init_extras = false
$init_defaults = false
$unix_socket_group = 'nogroup'
$install_init = false
}

View File

@ -1,8 +1,10 @@
# Class: supervisord::pip
#
# Optional class to install setuptool and pip
#
class supervisord::pip inherits supervisord {
Exec {
path => '/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin'
}
Exec { path => [ '/usr/bin/', '/usr/local/bin', '/bin', '/usr/local/sbin', '/usr/sbin', '/sbin' ] }
exec { 'install_setuptools':
command => "curl ${supervisord::setuptools_url} | python",

View File

@ -1,6 +1,14 @@
# Define: supervisord::program
#
# This define creates an program configuration file
#
# Documentation on parameters available at:
# http://supervisord.org/configuration.html#program-x-section-settings
#
define supervisord::program(
$command,
$ensure = present,
$ensure_process = 'running',
$env_var = undef,
$process_name = undef,
$numprocs = undef,
@ -12,17 +20,17 @@ define supervisord::program(
$startretries = undef,
$exitcodes = undef,
$stopsignal = undef,
$stopwaitsec = undef,
$stopwaitsecs = undef,
$stopasgroup = undef,
$killasgroup = undef,
$user = undef,
$redirect_stderr = undef,
$stdout_logfile = "${supervisord::log_path}/program_${name}.log",
$stdout_logfile = "program_${name}.log",
$stdout_logfile_maxbytes = undef,
$stdout_logfile_backups = undef,
$stdout_capture_maxbytes = undef,
$stdout_events_enabled = undef,
$stderr_logfile = "${supervisord::log_path}/program_${name}.error",
$stderr_logfile = "program_${name}.error",
$stderr_logfile_maxbytes = undef,
$stderr_logfile_backups = undef,
$stderr_capture_maxbytes = undef,
@ -35,11 +43,45 @@ define supervisord::program(
include supervisord
# parameter validation
validate_string($command)
validate_re($ensure_process, ['running', 'stopped', 'removed'])
if $process_name { validate_string($process_name) }
if $numprocs { validate_re($numprocs, '^\d+')}
if $numprocs_start { validate_re($numprocs_start, '^\d+')}
if $priority { validate_re($priority, '^\d+') }
if $autostart { validate_bool($autostart) }
if $autorestart { validate_re($autorestart, ['true', 'false', 'unexpected']) }
if $startsecs { validate_re($startsecs, '^\d+')}
if $startretries { validate_re($startretries, '^\d+')}
if $exitcodes { validate_string($exitcodes)}
if $stopsignal { validate_re($stopsignal, ['TERM', 'HUP', 'INT', 'QUIT', 'KILL', 'USR1', 'USR2']) }
if $stopwaitsecs { validate_re($stopwaitsecs, '^\d+')}
if $stopasgroup { validate_bool($stopasgroup) }
if $killasgroup { validate_bool($killasgroup) }
if $user { validate_string($user) }
if $redirect_stderr { validate_bool($redirect_stderr) }
validate_string($stdout_logfile)
if $stdout_logfile_maxbytes { validate_string($stdout_logfile_maxbytes) }
if $stdout_logfile_backups { validate_re($stdout_logfile_backups, '^\d+')}
if $stdout_capture_maxbytes { validate_string($stdout_capture_maxbytes) }
if $stdout_events_enabled { validate_bool($stdout_events_enabled) }
validate_string($stderr_logfile)
if $stderr_logfile_maxbytes { validate_string($stderr_logfile_maxbytes) }
if $stderr_logfile_backups { validate_re($stderr_logfile_backups, '^\d+')}
if $stderr_capture_maxbytes { validate_string($stderr_capture_maxbytes) }
if $stderr_events_enabled { validate_bool($stderr_events_enabled) }
if $directory { validate_absolute_path($directory) }
if $umask { validate_re($umask, '^[0-7][0-7][0-7]$') }
# convert environment data into a csv
if $env_var {
$env_hash = hiera($env_var)
$env_hash = hiera_hash($env_var)
validate_hash($env_hash)
$env_string = hash2csv($env_hash)
}
elsif $environment {
validate_hash($environment)
$env_string = hash2csv($environment)
}
@ -50,6 +92,22 @@ define supervisord::program(
owner => 'root',
mode => '0755',
content => template('supervisord/conf/program.erb'),
notify => Class['supervisord::service']
notify => Class['supervisord::reload']
}
case $ensure_process {
'stopped': {
supervisord::supervisorctl { "stop_${name}":
command => 'stop',
process => $name
}
}
'removed': {
supervisord::supervisorctl { "remove_${name}":
command => 'remove',
process => $name
}
}
default: { }
}
}

View File

@ -0,0 +1,21 @@
# Class: supervisord::reload
#
# Class to reread and update supervisord with supervisorctl
#
class supervisord::reload {
Exec { path => [ '/usr/bin/', '/usr/local/bin' ] }
$supervisorctl = $::supervisord::executable_ctl
exec { 'supervisorctl_reread':
command => "${supervisorctl} reread",
refreshonly => true,
returns => [0, 2],
}
exec { 'supervisorctl_update':
command => "${supervisorctl} update",
refreshonly => true,
returns => [0, 2],
}
}

View File

@ -1,5 +1,9 @@
# Class: supervisord::service
#
# Class for the supervisord service
#
class supervisord::service inherits supervisord {
service { 'supervisord':
service { $supervisord::service_name:
ensure => $supervisord::service_ensure,
enable => true,
hasrestart => true,

View File

@ -0,0 +1,29 @@
# Define: supervisord:supervisorctl
#
# This define executes command with the supervisorctl tool
#
define supervisord::supervisorctl(
$command,
$process = undef,
$refreshonly = false
) {
Exec { path => [ '/usr/bin/', '/usr/local/bin' ] }
validate_string($command)
validate_string($process)
$supervisorctl = $::supervisord::executable_ctl
if $process {
$cmd = join([$supervisorctl, $command, $process], ' ')
}
else {
$cmd = join([$supervisorctl, $command])
}
exec { "supervisorctl_command_${name}":
command => $cmd,
refreshonly => $refreshonly
}
}

View File

@ -0,0 +1,10 @@
HOSTS:
centos-65-i386:
roles:
- master
platform: el-6-i386
box : centos-65-i386-virtualbox-nocm
box_url : http://puppet-vagrant-boxes.puppetlabs.com/centos-65-i386-virtualbox-nocm.box
hypervisor : vagrant
CONFIG:
type: foss

View File

@ -0,0 +1,10 @@
HOSTS:
centos-65-x64:
roles:
- master
platform: el-6-x86_64
box : centos-65-x64-virtualbox-nocm
box_url : http://puppet-vagrant-boxes.puppetlabs.com/centos-65-x64-virtualbox-nocm.box
hypervisor : vagrant
CONFIG:
type: foss

View File

@ -0,0 +1,10 @@
HOSTS:
debian-73-i386:
roles:
- master
platform: debian-7-i386
box : debian-73-i386-virtualbox-nocm
box_url : http://puppet-vagrant-boxes.puppetlabs.com/debian-73-i386-virtualbox-nocm.box
hypervisor : vagrant
CONFIG:
type: foss

View File

@ -0,0 +1,10 @@
HOSTS:
debian-73-x64:
roles:
- master
platform: debian-7-amd64
box : debian-73-x64-virtualbox-nocm
box_url : http://puppet-vagrant-boxes.puppetlabs.com/debian-73-x64-virtualbox-nocm.box
hypervisor : vagrant
CONFIG:
type: foss

View File

@ -0,0 +1,10 @@
HOSTS:
debian-73-x64:
roles:
- master
platform: debian-7-amd64
box : debian-73-x64-virtualbox-nocm
box_url : http://puppet-vagrant-boxes.puppetlabs.com/debian-73-x64-virtualbox-nocm.box
hypervisor : vagrant
CONFIG:
type: foss

View File

@ -0,0 +1,114 @@
require 'spec_helper_acceptance'
describe 'supervisord install' do
context 'default parameters with pip and init install' do
it 'should work with no errors' do
pp = <<-EOS
class { 'supervisord': install_pip => true, install_init => true}
EOS
expect(apply_manifest(pp).exit_code).to_not eq(1)
expect(apply_manifest(pp).exit_code).to eq(0)
end
describe service('supervisord') do
it { should be_enabled }
it { should be_running }
it 'should restart successfully' do
cmd="service supervisord restart"
expect(shell(cmd).exit_code).to_not eq(1)
end
end
end
end
describe 'supervisord::program' do
context 'create a program config' do
it 'should install a program file' do
pp = <<-EOS
include supervisord
supervisord::program { 'test':
command => 'echo',
priority => '100',
environment => {
'HOME' => '/root',
'PATH' => '/bin',
}
}
EOS
expect(apply_manifest(pp).exit_code).to_not eq(1)
expect(apply_manifest(pp).exit_code).to eq(0)
end
it 'should contain the correct values' do
cmd='grep command=echo /etc/supervisor.d/program_test.conf'
expect(shell(cmd).exit_code).to eq(0)
cmd='grep priority=100 /etc/supervisor.d/program_test.conf'
expect(shell(cmd).exit_code).to eq(0)
cmd='grep "environment=" /etc/supervisor.d/program_test.conf'
expect(shell(cmd).exit_code).to eq(0)
end
end
end
describe 'supervisord::fcgi-program' do
context 'create fcgi-program config' do
it 'should install a fcgi-program file' do
pp = <<-EOS
include supervisord
supervisord::fcgi_program { 'test':
socket => 'tcp://localhost:1000',
command => 'echo',
priority => '100',
environment => {
'HOME' => '/root',
'PATH' => '/bin',
}
}
EOS
expect(apply_manifest(pp).exit_code).to_not eq(1)
expect(apply_manifest(pp).exit_code).to eq(0)
end
it 'should contain the correct values' do
cmd='grep socket=tcp://localhost:1000 /etc/supervisor.d/fcgi-program_test.conf'
expect(shell(cmd).exit_code).to eq(0)
cmd="grep command=echo /etc/supervisor.d/fcgi-program_test.conf"
expect(shell(cmd).exit_code).to eq(0)
cmd="grep priority=100 /etc/supervisor.d/fcgi-program_test.conf"
expect(shell(cmd).exit_code).to eq(0)
cmd='grep "environment=" /etc/supervisor.d/fcgi-program_test.conf'
expect(shell(cmd).exit_code).to eq(0)
end
end
end
describe 'supervisord::group' do
context 'create group config' do
it 'should install a group config' do
pp = <<-EOS
include supervisord
supervisord::group { 'test':
programs => ['test'],
priority => '100',
}
EOS
expect(apply_manifest(pp).exit_code).to_not eq(1)
expect(apply_manifest(pp).exit_code).to eq(0)
end
it 'should contain the correct values' do
cmd='grep "programs=test" /etc/supervisor.d/group_test.conf'
expect(shell(cmd).exit_code).to eq(0)
cmd="grep priority=100 /etc/supervisor.d/group_test.conf"
expect(shell(cmd).exit_code).to eq(0)
end
end
end

View File

@ -3,14 +3,26 @@ require 'spec_helper'
describe 'supervisord' do
concatdir = '/var/lib/puppet/concat'
configfile = '/etc/supervisord.conf'
let(:facts) {{ :concat_basedir => concatdir }}
it { should contain_class('supervisord') }
it { should contain_class('supervisord::install') }
it { should contain_class('supervisord::config') }
it { should contain_class('supervisord::service') }
it { should contain_concat__fragment('supervisord_main').with_content(/logfile/) }
it { should contain_class('supervisord::params') }
it { should contain_class('supervisord::reload') }
it { should contain_package('supervisor') }
describe '#service_name' do
context 'default' do
it { should contain_service('supervisord') }
end
context 'specified' do
let(:params) {{ :service_name => 'myservicename' }}
it { should contain_service('myservicename') }
end
end
describe '#install_pip' do
context 'default' do
@ -18,8 +30,16 @@ describe 'supervisord' do
end
context 'true' do
let (:params) {{ :install_pip => true }}
let(:params) {{ :install_pip => true }}
it { should contain_class('supervisord::pip') }
it { should contain_exec('install_setuptools') }
it { should contain_exec('install_pip') }
end
context 'true and RedHat' do
let(:params) {{ :install_pip => true }}
let(:facts) {{ :osfamily => 'RedHat', :concat_basedir => concatdir }}
it { should contain_exec('pip_provider_name_fix') }
end
end
@ -28,11 +48,6 @@ describe 'supervisord' do
it { should contain_class('supervisord').without_env_hash }
it { should contain_class('supervisord').without_env_string }
end
#context 'is specified' do
# let(:params) {{ :env_var => 'foovars' }}
# let(:hiera_data) {{ :foovars => { 'key1' => 'value1', 'key2' => 'value2' } }}
# it { should contain_concat__fragment('supervisord_main').with_content(/environment=key1='value1',key2='value2'/) }
#end
end
describe '#environment' do
@ -41,7 +56,8 @@ describe 'supervisord' do
end
context 'is specified' do
let(:params) {{ :environment => { 'key1' => 'value1', 'key2' => 'value2' } }}
it { should contain_concat__fragment('supervisord_main').with_content(/environment=key1='value1',key2='value2'/) }
it { should contain_concat__fragment('supervisord_main')\
.with_content(/environment=key1='value1',key2='value2'/) }
end
end
@ -54,17 +70,20 @@ describe 'supervisord' do
it { should_not contain_file('/etc/init.d/supervisord') }
end
describe 'on supported OS'
describe 'on supported OS' do
context 'with Debian' do
let(:facts) {{ :osfamily => 'Debian', :concat_basedir => concatdir }}
it { should contain_file('/etc/init.d/supervisord') }
it { should contain_file('/etc/default/supervisor') }
end
context 'with RedHat' do
let(:facts) {{ :osfamily => 'RedHat', :concat_basedir => concatdir }}
it { should contain_file('/etc/init.d/supervisord') }
it { should contain_file('/etc/sysconfig/supervisord') }
end
end
end
describe '#unix_socket' do
context 'default' do
@ -89,10 +108,192 @@ describe 'supervisord' do
describe '#run_path' do
context 'default' do
it { should_not contain_file('/var/run') }
it { should contain_concat__fragment('supervisord_main') \
.with_content(/pidfile=\/var\/run\/supervisord.pid$/) }
end
context 'custom setting' do
let(:params) {{ :run_path => '/var/run/supervisord'}}
it { should contain_file('/var/run/supervisord') }
context 'is specified' do
let(:params) {{ :run_path => '/opt/supervisord/run' }}
it { should contain_file('/opt/supervisord/run') }
it { should contain_concat__fragment('supervisord_main') \
.with_content(/pidfile=\/opt\/supervisord\/run\/supervisord.pid$/) }
end
end
describe '#log_path' do
context 'default' do
it { should contain_file('/var/log/supervisor') }
it { should contain_concat__fragment('supervisord_main') \
.with_content(/logfile=\/var\/log\/supervisor\/supervisord.log$/) }
end
context 'is specified' do
let(:params) {{ :log_path => '/opt/supervisord/logs' }}
it { should contain_file('/opt/supervisord/logs')}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/logfile=\/opt\/supervisord\/logs\/supervisord.log$/) }
end
end
describe '#config_include' do
context 'default' do
it { should contain_file('/etc/supervisor.d') }
it { should contain_concat__fragment('supervisord_main') \
.with_content(/files=\/etc\/supervisor.d\/\*.conf$/) }
end
context 'is specified' do
let(:params) {{ :config_include => '/opt/supervisord/conf.d' }}
it { should contain_file('/opt/supervisord/conf.d') }
it { should contain_concat__fragment('supervisord_main') \
.with_content(/files=\/opt\/supervisord\/conf.d\/\*.conf$/) }
end
end
describe '#config_dirs' do
context 'is specified' do
let(:params) {{ :config_dirs => ['/etc/supervisor.d/*.conf', '/opt/supervisor.d/*', '/usr/share/supervisor.d/*.config'] }}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/files=\/etc\/supervisor.d\/\*.conf \/opt\/supervisor.d\/\* \/usr\/share\/supervisor.d\/\*.config$/) }
end
end
describe '#config_file' do
context 'default' do
it { should contain_file('/etc/supervisord.conf') }
end
context 'is specified' do
let(:params) {{ :config_file => '/opt/supervisord/supervisor.conf' }}
it { should contain_file('/opt/supervisord/supervisor.conf') }
end
end
describe '#nodaemon' do
context 'default' do
it { should contain_concat__fragment('supervisord_main') \
.with_content(/nodaemon=false$/) }
end
context 'true' do
let(:params) {{ :nodaemon => true }}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/nodaemon=true$/) }
end
context 'invalid' do
let(:params) {{ :nodaemon => 'invalid' }}
it { expect { raise_error(Puppet::Error, /is not a boolean/) }}
end
end
describe '#minfds' do
context 'default' do
it { should contain_concat__fragment('supervisord_main') \
.with_content(/minfds=1024$/) }
end
context 'specified' do
let(:params) {{ :minfds => 2048 }}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/minfds=2048$/) }
end
context 'invalid' do
let(:params) {{ :minfds => 'string' }}
it { expect { raise_error(Puppet::Error, /invalid minfds/) }}
end
end
describe '#minprocs' do
context 'default' do
it { should contain_concat__fragment('supervisord_main') \
.with_content(/minprocs=200$/) }
end
context 'specified' do
let(:params) {{ :minprocs => 300 }}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/minprocs=300$/) }
end
context 'invalid' do
let(:params) {{ :minfds => 'string' }}
it { expect { raise_error(Puppet::Error, /invalid minprocs/) }}
end
end
describe '#strip_ansi' do
context 'default' do
it { should_not contain_concat__fragment('supervisord_main') \
.with_content(/strip_ansi$/) }
end
context 'true' do
let(:params) {{ :strip_ansi => true }}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/strip_ansi=true$/) }
end
context 'invalid' do
let(:params) {{ :strip_ansi => 'string' }}
it { expect { raise_error(Puppet::Error, /is not a boolean/) }}
end
end
describe '#user' do
context 'default' do
it { should_not contain_concat__fragment('supervisord_main') \
.with_content(/user$/) }
end
context 'specified' do
let(:params) {{ :user => 'myuser' }}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/user=myuser$/) }
end
end
describe '#identifier' do
context 'default' do
it { should_not contain_concat__fragment('supervisord_main') \
.with_content(/identifier$/) }
end
context 'specified' do
let(:params) {{ :identifier => 'myidentifier' }}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/identifier=myidentifier$/) }
end
end
describe '#directory' do
context 'default' do
it { should_not contain_concat__fragment('supervisord_main') \
.with_content(/directory$/) }
end
context 'specified' do
let(:params) {{ :directory => '/opt/supervisord' }}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/directory=\/opt\/supervisord$/) }
end
end
describe '#nocleanup' do
context 'default' do
it { should_not contain_concat__fragment('supervisord_main') \
.with_content(/nocleanup$/) }
end
context 'true' do
let(:params) {{ :nocleanup => true }}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/nocleanup=true$/) }
end
context 'invalid' do
let(:params) {{ :nocleanup => 'string' }}
it { expect { raise_error(Puppet::Error, /is not a boolean/) }}
end
end
describe '#childlogdir' do
context 'default' do
it { should_not contain_concat__fragment('supervisord_main') \
.with_content(/childlogdir$/) }
end
context 'specified' do
let(:params) {{ :childlogdir => '/opt/supervisord/logdir' }}
it { should contain_concat__fragment('supervisord_main') \
.with_content(/childlogdir=\/opt\/supervisord\/logdir$/) }
end
context 'invalid' do
let(:params) {{ :childlogdir => 'not_a_path' }}
it { expect { raise_error(Puppet::Error, /is not an absolute path/) }}
end
end
end

View File

@ -2,14 +2,85 @@ require 'spec_helper'
describe 'supervisord::eventlistener', :type => :define do
let(:title) {'foo'}
let(:default_params) {{ :command => 'bar',
:stdout_logfile => '/var/log/supervisor/eventlistener_foo.log',
:stderr_logfile => '/var/log/supervisor/eventlistener_foo.error',
}}
let(:params) { default_params }
let(:facts) {{ :concat_basedir => '/var/lib/puppet/concat' }}
let(:default_params) do
{
:command => 'bar',
:process_name => '%(process_num)s',
:events => ['PROCESS_STATE', 'PROCESS_STATE_STARTING'],
:buffer_size => 10,
:numprocs => '1',
:numprocs_start => '0',
:priority => '999',
:autostart => true,
:autorestart => 'unexpected',
:startsecs => '1',
:startretries => '3',
:exitcodes => '0,2',
:stopsignal => 'TERM',
:stopwaitsecs => '10',
:stopasgroup => true,
:killasgroup => true,
:user => 'baz',
:redirect_stderr => true,
:stdout_logfile => 'eventlistener_foo.log',
:stdout_logfile_maxbytes => '50MB',
:stdout_logfile_backups => '10',
:stdout_events_enabled => true,
:stderr_logfile => 'eventlistener_foo.error',
:stderr_logfile_maxbytes => '50MB',
:stderr_logfile_backups => '10',
:stderr_events_enabled => true,
:environment => { 'env1' => 'value1', 'env2' => 'value2' },
:directory => '/opt/supervisord/chroot',
:umask => '022',
:serverurl => 'AUTO'
}
end
it { should contain_supervisord__eventlistener('foo') }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/command=bar/) }
context 'default' do
let(:params) { default_params }
it { should contain_supervisord__eventlistener('foo') }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/\[eventlistener:foo\]/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/command=bar/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/process_name=\%\(process_num\)s/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/events=PROCESS_STATE,PROCESS_STATE_STARTING/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/buffer_size=10/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/numprocs=1/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/numprocs_start=0/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/priority=999/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/autostart=true/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/startsecs=1/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/startretries=3/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/exitcodes=0,2/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stopsignal=TERM/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stopwaitsecs=10/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stopasgroup=true/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/killasgroup=true/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/user=baz/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/redirect_stderr=true/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stdout_logfile=\/var\/log\/supervisor\/eventlistener_foo.log/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stdout_logfile_maxbytes=50MB/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stdout_logfile_backups=10/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stdout_events_enabled=true/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stderr_logfile=\/var\/log\/supervisor\/eventlistener_foo.error/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stderr_logfile_maxbytes=50MB/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stderr_logfile_backups=10/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stderr_events_enabled=true/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/environment=env1='value1',env2='value2'/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/directory=\/opt\/supervisord\/chroot/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/umask=022/) }
it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/serverurl=AUTO/) }
end
context 'ensure_process_stopped' do
let(:params) { default_params.merge({ :ensure_process => 'stopped' }) }
it { should contain_supervisord__supervisorctl('stop_foo') }
end
context 'ensure_process_removed' do
let(:params) { default_params.merge({ :ensure_process => 'removed' }) }
it { should contain_supervisord__supervisorctl('remove_foo') }
end
end

View File

@ -2,21 +2,87 @@ require 'spec_helper'
describe 'supervisord::fcgi_program', :type => :define do
let(:title) {'foo'}
let(:default_params) {{ :command => 'bar',
:socket => 'tcp://localhost:1000',
:stdout_logfile => '/var/log/supervisor/fcgi-program_foo.log',
:stderr_logfile => '/var/log/supervisor/fcgi-program_foo.error',
:user => 'baz'
}}
let(:params) { default_params }
let(:facts) {{ :concat_basedir => '/var/lib/puppet/concat' }}
let(:default_params) do
{
:command => 'bar',
:socket => 'tcp://localhost:1000',
:process_name => '%(process_num)s',
:numprocs => '1',
:numprocs_start => '0',
:priority => '999',
:autostart => true,
:autorestart => 'unexpected',
:startsecs => '1',
:startretries => '3',
:exitcodes => '0,2',
:stopsignal => 'TERM',
:stopwaitsecs => '10',
:stopasgroup => true,
:killasgroup => true,
:user => 'baz',
:redirect_stderr => true,
:stdout_logfile => 'fcgi-program_foo.log',
:stdout_logfile_maxbytes => '50MB',
:stdout_logfile_backups => '10',
:stdout_capture_maxbytes => '0',
:stdout_events_enabled => true,
:stderr_logfile => 'fcgi-program_foo.error',
:stderr_logfile_maxbytes => '50MB',
:stderr_logfile_backups => '10',
:stderr_capture_maxbytes => '0',
:stderr_events_enabled => true,
:environment => { 'env1' => 'value1', 'env2' => 'value2' },
:directory => '/opt/supervisord/chroot',
:umask => '022',
:serverurl => 'AUTO'
}
end
it { should contain_supervisord__fcgi_program('foo') }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/\[fcgi-program:foo\]/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/socket=tcp:\/\/localhost:1000/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/command=bar/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/user=baz/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_logfile=\/var\/log\/supervisor\/fcgi-program_foo.log/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_logfile=\/var\/log\/supervisor\/fcgi-program_foo.error/) }
context 'default' do
let(:params) { default_params }
it { should contain_supervisord__fcgi_program('foo') }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/\[fcgi-program:foo\]/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/socket=tcp:\/\/localhost:1000/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/command=bar/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/process_name=\%\(process_num\)s/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/numprocs=1/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/numprocs_start=0/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/priority=999/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/autostart=true/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/startsecs=1/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/startretries=3/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/exitcodes=0,2/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stopsignal=TERM/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stopwaitsecs=10/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stopasgroup=true/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/killasgroup=true/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/user=baz/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/redirect_stderr=true/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_logfile=\/var\/log\/supervisor\/fcgi-program_foo.log/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_logfile_maxbytes=50MB/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_logfile_backups=10/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_capture_maxbytes=0/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_events_enabled=true/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_logfile=\/var\/log\/supervisor\/fcgi-program_foo.error/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_logfile_maxbytes=50MB/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_logfile_backups=10/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_capture_maxbytes=0/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_events_enabled=true/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/environment=env1='value1',env2='value2'/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/directory=\/opt\/supervisord\/chroot/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/umask=022/) }
it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/serverurl=AUTO/) }
end
context 'ensure_process_stopped' do
let(:params) { default_params.merge({ :ensure_process => 'stopped' }) }
it { should contain_supervisord__supervisorctl('stop_foo') }
end
context 'ensure_process_removed' do
let(:params) { default_params.merge({ :ensure_process => 'removed' }) }
it { should contain_supervisord__supervisorctl('remove_foo') }
end
end

View File

@ -2,19 +2,85 @@ require 'spec_helper'
describe 'supervisord::program', :type => :define do
let(:title) {'foo'}
let(:default_params) {{ :command => 'bar',
:stdout_logfile => '/var/log/supervisor/program_foo.log',
:stderr_logfile => '/var/log/supervisor/program_foo.error',
:user => 'baz'
}}
let(:params) { default_params }
let(:facts) {{ :concat_basedir => '/var/lib/puppet/concat' }}
let(:default_params) do
{
:command => 'bar',
:process_name => '%(process_num)s',
:numprocs => '1',
:numprocs_start => '0',
:priority => '999',
:autostart => true,
:autorestart => 'unexpected',
:startsecs => '1',
:startretries => '3',
:exitcodes => '0,2',
:stopsignal => 'TERM',
:stopwaitsecs => '10',
:stopasgroup => true,
:killasgroup => true,
:user => 'baz',
:redirect_stderr => true,
:stdout_logfile => 'program_foo.log',
:stdout_logfile_maxbytes => '50MB',
:stdout_logfile_backups => '10',
:stdout_capture_maxbytes => '0',
:stdout_events_enabled => true,
:stderr_logfile => 'program_foo.error',
:stderr_logfile_maxbytes => '50MB',
:stderr_logfile_backups => '10',
:stderr_capture_maxbytes => '0',
:stderr_events_enabled => true,
:environment => { 'env1' => 'value1', 'env2' => 'value2' },
:directory => '/opt/supervisord/chroot',
:umask => '022',
:serverurl => 'AUTO'
}
end
it { should contain_supervisord__program('foo') }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/\[program:foo\]/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/command=bar/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/user=baz/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_logfile=\/var\/log\/supervisor\/program_foo.log/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_logfile=\/var\/log\/supervisor\/program_foo.error/) }
context 'default' do
let(:params) { default_params }
it { should contain_supervisord__program('foo') }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/\[program:foo\]/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/command=bar/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/process_name=\%\(process_num\)s/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/numprocs=1/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/numprocs_start=0/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/priority=999/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/autostart=true/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/startsecs=1/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/startretries=3/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/exitcodes=0,2/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stopsignal=TERM/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stopwaitsecs=10/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stopasgroup=true/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/killasgroup=true/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/user=baz/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/redirect_stderr=true/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_logfile=\/var\/log\/supervisor\/program_foo.log/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_logfile_maxbytes=50MB/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_logfile_backups=10/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_capture_maxbytes=0/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_events_enabled=true/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_logfile=\/var\/log\/supervisor\/program_foo.error/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_logfile_maxbytes=50MB/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_logfile_backups=10/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_capture_maxbytes=0/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_events_enabled=true/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/environment=env1='value1',env2='value2'/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/directory=\/opt\/supervisord\/chroot/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/umask=022/) }
it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/serverurl=AUTO/) }
end
context 'ensure_process_stopped' do
let(:params) { default_params.merge({ :ensure_process => 'stopped' }) }
it { should contain_supervisord__supervisorctl('stop_foo') }
end
context 'ensure_process_removed' do
let(:params) { default_params.merge({ :ensure_process => 'removed' }) }
it { should contain_supervisord__supervisorctl('remove_foo') }
end
end

View File

@ -0,0 +1,13 @@
require 'spec_helper'
describe 'supervisord::supervisorctl', :type => :define do
let(:title) {'command_foo'}
let(:default_params) {{
:command => 'command',
:process => 'foo'
}}
let(:params) { default_params }
let(:facts) {{ :concat_basedir => '/var/lib/puppet/concat' }}
it { should contain_supervisord__supervisorctl('command_foo') }
end

View File

@ -7,3 +7,4 @@ RSpec.configure do |c|
c.manifest_dir = File.join(fixture_path, 'manifests')
end
at_exit { RSpec::Puppet::Coverage.report! }

View File

@ -0,0 +1,24 @@
require 'beaker-rspec'
hosts.each do |host|
# Install Puppet
install_puppet
end
RSpec.configure do |c|
# Project root
proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
# Readable test descriptions
c.formatter = :documentation
# Configure all nodes in nodeset
c.before :suite do
# Install module
puppet_module_install(:source => proj_root, :module_name => 'supervisord')
hosts.each do |host|
on host, puppet('module','install','puppetlabs-stdlib'), { :acceptable_exit_codes => [0,1] }
on host, puppet('module','install','puppetlabs-concat'), { :acceptable_exit_codes => [0,1] }
end
end
end

View File

@ -1,25 +0,0 @@
require 'rspec-system/spec_helper'
require 'rspec-system-puppet/helpers'
include RSpecSystemPuppet::Helpers
RSpec.configure do |c|
# Project root
proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
# Enable colour
c.tty = true
# This is where we 'setup' the nodes before running our tests
c.before :suite do
# Install puppet
puppet_install
puppet_master_install
# Replace mymodule with your module name
puppet_module_install(:source => proj_root, :module_name => 'supervisord')
shell('puppet module install puppetlabs/stdlib')
shell('puppet module install puppetlabs/concat')
end
end

View File

@ -1,120 +0,0 @@
require 'spec_helper_system'
describe 'basic install' do
it 'class should work with no errors' do
pp = <<-EOS
class { 'supervisord': install_pip => true, install_init => true}
EOS
puppet_apply(pp) do |r|
r.exit_code.should_not == 1
r.refresh
r.exit_code.should be_zero
end
shell("pgrep supervisord") do |r|
r.exit_code.should be_zero
end
end
end
describe 'add a program config' do
it 'supervisord::program should install a program config' do
pp = <<-EOS
include supervisord
supervisord::program { 'test':
command => 'echo',
priority => '100',
environment => {
'HOME' => '/root',
'PATH' => '/bin',
}
}
EOS
puppet_apply(pp) do |r|
r.exit_code.should_not == 1
r.refresh
r.exit_code.should be_zero
end
shell("grep command=echo /etc/supervisor.d/program_test.conf") do |r|
r.exit_code.should be_zero
end
shell("grep priority=100 /etc/supervisor.d/program_test.conf") do |r|
r.exit_code.should be_zero
end
shell('grep "environment=" /etc/supervisor.d/program_test.conf') do |r|
r.exit_code.should be_zero
end
end
end
describe 'add a fcgi-program config' do
it 'supervisord::fcgi_program should install a program config' do
pp = <<-EOS
include supervisord
supervisord::fcgi_program { 'test':
socket => 'tcp://localhost:1000',
command => 'echo',
priority => '100',
environment => {
'HOME' => '/root',
'PATH' => '/bin',
}
}
EOS
puppet_apply(pp) do |r|
r.exit_code.should_not == 1
r.refresh
r.exit_code.should be_zero
end
shell("grep socket=tcp://localhost:1000 /etc/supervisor.d/fcgi-program_test.conf") do |r|
r.exit_code.should be_zero
end
shell("grep command=echo /etc/supervisor.d/fcgi-program_test.conf") do |r|
r.exit_code.should be_zero
end
shell("grep priority=100 /etc/supervisor.d/fcgi-program_test.conf") do |r|
r.exit_code.should be_zero
end
shell('grep "environment=" /etc/supervisor.d/fcgi-program_test.conf') do |r|
r.exit_code.should be_zero
end
end
end
describe 'add a group config' do
it 'supervisord::group should install a program config' do
pp = <<-EOS
include supervisord
supervisord::group { 'test':
programs => ['program1', 'program2'],
priority => '100',
}
EOS
puppet_apply(pp) do |r|
r.exit_code.should_not == 1
r.refresh
r.exit_code.should be_zero
end
shell('grep "programs=program1,program2" /etc/supervisor.d/group_test.conf') do |r|
r.exit_code.should be_zero
end
shell("grep priority=100 /etc/supervisor.d/fcgi-program_test.conf") do |r|
r.exit_code.should be_zero
end
end
end

View File

@ -39,8 +39,8 @@ exitcodes=<%= @exitcodes %>
<% if @stopsignal -%>
stopsignal=<%= @stopsignal %>
<% end -%>
<% if @stopwaitsec -%>
stopwaitsec=<%= @stopwaitsec %>
<% if @stopwaitsecs -%>
stopwaitsecs=<%= @stopwaitsecs %>
<% end -%>
<% if @stopasgroup -%>
stopasgroup=<%= @stopasgroup %>
@ -54,7 +54,7 @@ user=<%= @user %>
<% if @redirect_stderr -%>
redirect_stderr=<%= @redirect_stderr %>
<% end -%>
stdout_logfile=<%= @stdout_logfile %>
stdout_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stdout_logfile %>
<% if @stdout_logfile_maxbytes -%>
stdout_logfile_maxbytes=<%= @stdout_logfile_maxbytes %>
<% end -%>
@ -64,7 +64,7 @@ stdout_logfile_backups=<%= @stdout_logfile_backups %>
<% if @stdout_events_enabled -%>
stdout_events_enabled=<%= @stdout_events_enabled %>
<% end -%>
stderr_logfile=<%= @stderr_logfile %>
stderr_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stderr_logfile %>
<% if @stderr_logfile_maxbytes -%>
stderr_logfile_maxbytes=<%= @stderr_logfile_maxbytes %>
<% end -%>

View File

@ -37,8 +37,8 @@ exitcodes=<%= @exitcodes %>
<% if @stopsignal -%>
stopsignal=<%= @stopsignal %>
<% end -%>
<% if @stopwaitsec -%>
stopwaitsec=<%= @stopwaitsec %>
<% if @stopwaitsecs -%>
stopwaitsecs=<%= @stopwaitsecs %>
<% end -%>
<% if @stopasgroup -%>
stopasgroup=<%= @stopasgroup %>
@ -53,7 +53,7 @@ user=<%= @user %>
redirect_stderr=<%= @redirect_stderr %>
<% end -%>
<% if @stdout_logfile -%>
stdout_logfile=<%= @stdout_logfile %>
stdout_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stdout_logfile %>
<% end -%>
<% if @stdout_logfile_maxbytes -%>
stdout_logfile_maxbytes=<%= @stdout_logfile_maxbytes %>
@ -68,7 +68,7 @@ stdout_capture_maxbytes=<%= @stdout_capture_maxbytes %>
stdout_events_enabled=<%= @stdout_events_enabled %>
<% end -%>
<% if @stderr_logfile -%>
stderr_logfile=<%= @stderr_logfile %>
stderr_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stderr_logfile %>
<% end -%>
<% if @stderr_logfile_maxbytes -%>
stderr_logfile_maxbytes=<%= @stderr_logfile_maxbytes %>

View File

@ -30,8 +30,8 @@ exitcodes=<%= @exitcodes %>
<% if @stopsignal -%>
stopsignal=<%= @stopsignal %>
<% end -%>
<% if @stopwaitsec -%>
stopwaitsec=<%= @stopwaitsec %>
<% if @stopwaitsecs -%>
stopwaitsecs=<%= @stopwaitsecs %>
<% end -%>
<% if @stopasgroup -%>
stopasgroup=<%= @stopasgroup %>
@ -46,7 +46,7 @@ user=<%= @user %>
redirect_stderr=<%= @redirect_stderr %>
<% end -%>
<% if @stdout_logfile -%>
stdout_logfile=<%= @stdout_logfile %>
stdout_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stdout_logfile %>
<% end -%>
<% if @stdout_logfile_maxbytes -%>
stdout_logfile_maxbytes=<%= @stdout_logfile_maxbytes %>
@ -61,7 +61,7 @@ stdout_capture_maxbytes=<%= @stdout_capture_maxbytes %>
stdout_events_enabled=<%= @stdout_events_enabled %>
<% end -%>
<% if @stderr_logfile -%>
stderr_logfile=<%= @stderr_logfile %>
stderr_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stderr_logfile %>
<% end -%>
<% if @stderr_logfile_maxbytes -%>
stderr_logfile_maxbytes=<%= @stderr_logfile_maxbytes %>

View File

@ -19,15 +19,15 @@ DESC=supervisor
test -x $DAEMON || exit 0
LOGDIR=<%= @log_path %>
PIDFILE=<%= @pid_file %>
PIDFILE=<%= @run_path %>/<%= @pid_file %>
DODTIME=5 # Time to wait for the server to die, in seconds
# If this value is set too low you might not
# let some servers to die gracefully and
# 'restart' will not work
# Include supervisor defaults if available
if [ -f /etc/default/supervisor ] ; then
. /etc/default/supervisor
if [ -f <%= @init_defaults %> ] ; then
. <%= @init_defaults %>
fi
set -e

View File

@ -5,4 +5,4 @@ set -a
# should probably put both of these options as runtime arguments
OPTIONS="-c <%= @config_file %>"
PIDFILE=<%= @pid_file %>
PIDFILE=<%= @run_path %><%= @pid_file %>

View File

@ -13,18 +13,19 @@
# xmlrpc interface as well as a few other nifty features.
# processname: supervisord
# config: <%= @config_file %>
# pidfile: <%= @pid_file %>
# pidfile: <%= @run_path %>/<%= @pid_file %>
#
# source function library
. /etc/rc.d/init.d/functions
# source system settings
[ -e <%= @init_extras %> ] && . <%= @init_extras %>
[ -e <%= @init_defaults %> ] && . <%= @init_defaults %>
RETVAL=0
DAEMON=/usr/bin/supervisord
DESC=supervisord
PIDFILE=<%= @run_path %>/<%= @pid_file %>
running_pid()
{

View File

@ -1,9 +1,9 @@
[supervisord]
logfile=<%= @log_file %>
pidfile=<%= @pid_file %>
logfile=<%= @log_path %>/<%= @log_file %>
pidfile=<%= @run_path %>/<%= @pid_file %>
nodaemon=<%= @nodaemon %>
minfds=<%= @minfds %>
minfds=<%= @minprocs %>
minprocs=<%= @minprocs %>
umask=<%= @umask %>
<% if @strip_ansi -%>
strip_ansi=<%= @strip_ansi %>
@ -12,7 +12,7 @@ strip_ansi=<%= @strip_ansi %>
user=<%= @user %>
<% end -%>
<% if @identifier -%>
indentifier=<%= @identifier %>
identifier=<%= @identifier %>
<% end -%>
<% if @directory -%>
directory=<%= @directory %>
@ -31,4 +31,4 @@ environment=<%= @env_string %>
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[include]
files=<%= @config_include %>/*.conf
files=<%= @config_include_string %>

View File

@ -1,5 +1,5 @@
[unix_http_server]
file=<%= @unix_socket_file %>
file=<%= @run_path %>/<%= @unix_socket_file %>
chmod=<%= @unix_socket_mode %>
chown=<%= @unix_socket_owner %>:<%= @unix_socket_group %>
<% if @unix_auth -%>
@ -8,7 +8,7 @@ password=<%= @unix_socket_password %>
<% end -%>
[supervisorctl]
serverurl=unix://<%= @unix_socket_file %>
serverurl=unix://<%= @run_path %>/<%= @unix_socket_file %>
<% if @unix_auth -%>
username=<%= @unix_username %>
password=<%= @unix_password %>

View File

@ -1,9 +1,35 @@
supervisord::program { 'myprogram':
command => 'command --args',
priority => '100',
environment => {
command => 'command --args',
process_name => '%(process_num)s',
numprocs => '1',
numprocs_start => '0',
priority => '999',
autostart => true,
autorestart => 'unexpected',
startsecs => '1',
startretries => '3',
exitcodes => '0,2',
stopsignal => 'TERM',
stopwaitsecs => '10',
stopasgroup => false,
killasgroup => false,
redirect_stderr => false,
stdout_logfile => 'program_foo.log',
stdout_logfile_maxbytes => '50MB',
stdout_logfile_backups => '10',
stdout_capture_maxbytes => '0',
stdout_events_enabled => false,
stderr_logfile => 'program_foo.error',
stderr_logfile_maxbytes => '50MB',
stderr_logfile_backups => '10',
stderr_capture_maxbytes => '0',
stderr_events_enabled => false,
environment => {
'HOME' => '/home/myuser',
'PATH' => '/bin:/sbin:/usr/bin:/usr/sbin',
'SECRET' => 'mysecret'
}
},
directory => undef,
umask => '022',
serverurl => 'AUTO'
}

View File

@ -4,17 +4,26 @@ export DEBIAN_FRONTEND=noninteractive
VAGRANT_CORE_FOLDER=$(cat '/.puphpet-stuff/vagrant-core-folder.txt')
shopt -s nullglob
files=("${VAGRANT_CORE_FOLDER}"/files/exec-once/*)
EXEC_ONCE_DIR="$1"
EXEC_ALWAYS_DIR="$2"
if [[ ! -f '/.puphpet-stuff/exec-once-ran' && (${#files[@]} -gt 0) ]]; then
echo 'Running files in files/exec-once'
find "${VAGRANT_CORE_FOLDER}/files/exec-once" -maxdepth 1 -not -path '*/\.*' -type f \( ! -iname "empty" \) -exec chmod +x '{}' \; -exec {} \;
echo 'Finished running files in files/exec-once'
echo 'To run again, delete file /.puphpet-stuff/exec-once-ran'
touch /.puphpet-stuff/exec-once-ran
shopt -s nullglob
files=("${VAGRANT_CORE_FOLDER}"/files/"${EXEC_ONCE_DIR}"/*)
if [[ (${#files[@]} -gt 0) ]]; then
echo "Running files in files/${EXEC_ONCE_DIR}"
if [ ! -d "/.puphpet-stuff/${EXEC_ONCE_DIR}-ran" ]; then
mkdir "/.puphpet-stuff/${EXEC_ONCE_DIR}-ran"
echo "Created directory /.puphpet-stuff/${EXEC_ONCE_DIR}-ran"
fi
find "${VAGRANT_CORE_FOLDER}/files/${EXEC_ONCE_DIR}" -maxdepth 1 -not -path '*/\.*' -type f \( ! -iname "empty" \) -exec cp -n '{}' "/.puphpet-stuff/${EXEC_ONCE_DIR}-ran" \;
find "/.puphpet-stuff/${EXEC_ONCE_DIR}-ran" -maxdepth 1 -type f -exec chmod +x '{}' \; -exec {} \; -exec sh -c '>{}' \;
echo "Finished running files in files/${EXEC_ONCE_DIR}"
echo "To run again, delete file(s) you want rerun in /.puphpet-stuff/${EXEC_ONCE_DIR}-ran or the whole folder to rerun all"
fi
echo 'Running files in files/exec-always'
find "${VAGRANT_CORE_FOLDER}/files/exec-always" -maxdepth 1 -not -path '*/\.*' -type f \( ! -iname "empty" \) -exec chmod +x '{}' \; -exec {} \;
echo 'Finished running files in files/exec-always'
echo "Running files in files/${EXEC_ALWAYS_DIR}"
find "${VAGRANT_CORE_FOLDER}/files/${EXEC_ALWAYS_DIR}" -maxdepth 1 -not -path '*/\.*' -type f \( ! -iname "empty" \) -exec chmod +x '{}' \; -exec {} \;
echo "Finished running files in files/${EXEC_ALWAYS_DIR}"

View File

@ -5,37 +5,76 @@ VAGRANT_CORE_FOLDER=$(cat '/.puphpet-stuff/vagrant-core-folder.txt')
OS=$(/bin/bash "${VAGRANT_CORE_FOLDER}/shell/os-detect.sh" ID)
VAGRANT_SSH_USERNAME=$(echo "$1")
if [[ ! -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa" ]]; then
ssh-keygen -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa" -P ""
function create_key()
{
BASE_KEY_NAME=$(echo "$1")
if [[ ! -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.ppk" ]]; then
if [ "${OS}" == 'debian' ] || [ "${OS}" == 'ubuntu' ]; then
apt-get install -y putty-tools >/dev/null
elif [ "${OS}" == 'centos' ]; then
yum -y install putty >/dev/null
if [[ ! -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/${BASE_KEY_NAME}" ]]; then
ssh-keygen -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/${BASE_KEY_NAME}" -P ""
if [[ ! -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/${BASE_KEY_NAME}.ppk" ]]; then
if [ "${OS}" == 'debian' ] || [ "${OS}" == 'ubuntu' ]; then
apt-get install -y putty-tools >/dev/null
elif [ "${OS}" == 'centos' ]; then
yum -y install putty >/dev/null
fi
puttygen "${VAGRANT_CORE_FOLDER}/files/dot/ssh/${BASE_KEY_NAME}" -O private -o "${VAGRANT_CORE_FOLDER}/files/dot/ssh/${BASE_KEY_NAME}.ppk"
fi
puttygen "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa" -O private -o "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.ppk"
echo "Your private key for SSH-based authentication has been saved to 'puphpet/files/dot/ssh/${BASE_KEY_NAME}'!"
else
echo "Pre-existing private key found at 'puphpet/files/dot/ssh/${BASE_KEY_NAME}'"
fi
}
echo 'Your private key for SSH-based authentication have been saved to "puphpet/files/dot/ssh/"!'
else
echo 'Using pre-existing private key at "puphpet/files/dot/ssh/id_rsa"'
create_key 'root_id_rsa'
create_key 'id_rsa'
PUBLIC_SSH_KEY=$(cat "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub")
echo 'Adding generated key to /root/.ssh/id_rsa'
echo 'Adding generated key to /root/.ssh/id_rsa.pub'
echo 'Adding generated key to /root/.ssh/authorized_keys'
mkdir -p /root/.ssh
cp "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa" '/root/.ssh/'
cp "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" '/root/.ssh/'
if [[ ! -f '/root/.ssh/authorized_keys' ]] || ! grep -q "${PUBLIC_SSH_KEY}" '/root/.ssh/authorized_keys'; then
cat "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" >> '/root/.ssh/authorized_keys'
fi
echo 'Adding generated key to /root/.ssh/authorized_keys'
mkdir -p /root/.ssh
cat "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" > '/root/.ssh/authorized_keys'
chown -R root '/root/.ssh'
chgrp -R root '/root/.ssh'
chmod 700 '/root/.ssh'
chmod 644 '/root/.ssh/id_rsa.pub'
chmod 600 '/root/.ssh/id_rsa'
chmod 600 '/root/.ssh/authorized_keys'
if [ "${VAGRANT_SSH_USERNAME}" != 'root' ]; then
VAGRANT_SSH_FOLDER="/home/${VAGRANT_SSH_USERNAME}/.ssh";
echo "Adding generated key to ${VAGRANT_SSH_FOLDER}/authorized_keys"
cat "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" > "${VAGRANT_SSH_FOLDER}/authorized_keys"
chown "${VAGRANT_SSH_USERNAME}" "${VAGRANT_SSH_FOLDER}/authorized_keys"
chgrp "${VAGRANT_SSH_USERNAME}" "${VAGRANT_SSH_FOLDER}/authorized_keys"
chmod 600 "${VAGRANT_SSH_FOLDER}/authorized_keys"
fi
mkdir -p "${VAGRANT_SSH_FOLDER}"
passwd -d vagrant >/dev/null
echo "Adding generated key to ${VAGRANT_SSH_FOLDER}/id_rsa"
echo "Adding generated key to ${VAGRANT_SSH_FOLDER}/id_rsa.pub"
echo "Adding generated key to ${VAGRANT_SSH_FOLDER}/authorized_keys"
cp "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa" "${VAGRANT_SSH_FOLDER}/id_rsa"
cp "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" "${VAGRANT_SSH_FOLDER}/id_rsa.pub"
if [[ ! -f "${VAGRANT_SSH_FOLDER}/authorized_keys" ]] || ! grep -q "${PUBLIC_SSH_KEY}" "${VAGRANT_SSH_FOLDER}/authorized_keys"; then
cat "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" >> "${VAGRANT_SSH_FOLDER}/authorized_keys"
fi
chown -R "${VAGRANT_SSH_USERNAME}" "${VAGRANT_SSH_FOLDER}"
chgrp -R "${VAGRANT_SSH_USERNAME}" "${VAGRANT_SSH_FOLDER}"
chmod 700 "${VAGRANT_SSH_FOLDER}"
chmod 644 "${VAGRANT_SSH_FOLDER}/id_rsa.pub"
chmod 600 "${VAGRANT_SSH_FOLDER}/id_rsa"
chmod 600 "${VAGRANT_SSH_FOLDER}/authorized_keys"
passwd -d "${VAGRANT_SSH_USERNAME}" >/dev/null
fi

View File

View File

View File

@ -1 +0,0 @@
Url not available

View File

@ -1 +0,0 @@
Url not available

View File

@ -1 +0,0 @@
Url not available

View File

View File

@ -1 +0,0 @@
Url not available

View File

View File

@ -1 +0,0 @@
Url not available

View File

View File

View File

@ -1 +0,0 @@
Url not available

View File

View File

View File

View File

View File

@ -1 +0,0 @@
Url not available

View File

View File

View File

View File

View File

@ -1 +0,0 @@
Url not available

View File

View File

View File

@ -1 +0,0 @@
Url not available

View File

View File

@ -1 +0,0 @@
Url not available

View File

View File

@ -1 +0,0 @@
Url not available

View File

View File

@ -1 +0,0 @@
Url not available

View File

View File

View File

View File

View File

Some files were not shown because too many files have changed in this diff Show More