diff --git a/manifests/slave.pp b/manifests/slave.pp index bd30be811..0559983c9 100644 --- a/manifests/slave.pp +++ b/manifests/slave.pp @@ -104,37 +104,6 @@ } } -#add jenkins slave user if necessary. - if $manage_slave_user and $slave_uid { - user { 'jenkins-slave_user': - ensure => present, - name => $slave_user, - comment => 'Jenkins Slave user', - home => $slave_home, - managehome => true, - uid => $slave_uid, - } - } - - if ($manage_slave_user) and (! $slave_uid) { - user { 'jenkins-slave_user': - ensure => present, - name => $slave_user, - comment => 'Jenkins Slave user', - home => $slave_home, - managehome => true, - } - } - - exec { 'get_swarm_client': - command => "wget -O ${slave_home}/${client_jar} ${client_url}/${client_jar}", - path => '/usr/bin:/usr/sbin:/bin:/usr/local/bin', - user => $slave_user, - #refreshonly => true, - creates => "${slave_home}/${client_jar}", - ## needs to be fixed if you create another version.. - } - # customizations based on the OS family case $::osfamily { 'Debian': { @@ -145,31 +114,110 @@ before => Service['jenkins-slave'], } } + 'Darwin': { + $defaults_location = $slave_home + } default: { $defaults_location = '/etc/sysconfig' } } - file { '/etc/init.d/jenkins-slave': - ensure => 'file', - mode => '0755', - owner => 'root', - group => 'root', - source => "puppet:///modules/${module_name}/jenkins-slave.${::osfamily}", - notify => Service['jenkins-slave'], + case $::kernel { + 'Linux': { + $fetch_command = "wget -O ${slave_home}/${client_jar} ${client_url}/${client_jar}" + $service_name = 'jenkins-slave' + $defaults_user = 'root' + $defaults_group = 'root' + $manage_user_home = true + + file { '/etc/init.d/jenkins-slave': + ensure => 'file', + mode => '0755', + owner => 'root', + group => 'root', + source => "puppet:///modules/${module_name}/jenkins-slave.${::osfamily}", + notify => Service['jenkins-slave'], + } + } + 'Darwin': { + $fetch_command = "curl -O ${client_url}/${client_jar}" + $service_name = 'org.jenkins-ci.slave.jnlp' + $defaults_user = 'jenkins' + $defaults_group = 'wheel' + $manage_user_home = false + + file { "${slave_home}/start-slave.sh": + ensure => 'file', + content => template("${module_name}/start-slave.sh.erb"), + mode => '0755', + owner => 'root', + group => 'wheel', + } + + file { '/Library/LaunchDaemons/org.jenkins-ci.slave.jnlp.plist': + ensure => 'file', + content => template("${module_name}/org.jenkins-ci.slave.jnlp.plist.erb"), + mode => '0644', + owner => 'root', + group => 'wheel', + } + + file { '/var/log/jenkins': + ensure => 'directory', + owner => $slave_user, + } + + if $manage_slave_user { + # osx doesn't have managehome support, so create directory + file { $slave_home: + ensure => directory, + mode => '0755', + owner => $slave_user, + require => User['jenkins-slave_user'], + } + } + + File['/var/log/jenkins'] -> + File['/Library/LaunchDaemons/org.jenkins-ci.slave.jnlp.plist'] -> + Service['jenkins-slave'] + } + default: { } + } + +#add jenkins slave user if necessary. + if $manage_slave_user { + user { 'jenkins-slave_user': + ensure => present, + name => $slave_user, + comment => 'Jenkins Slave user', + home => $slave_home, + managehome => $manage_user_home, + uid => $slave_uid, + } } file { "${defaults_location}/jenkins-slave": ensure => 'file', mode => '0600', - owner => 'root', - group => 'root', + owner => $defaults_user, + group => $defaults_group, content => template("${module_name}/jenkins-slave-defaults.erb"), notify => Service['jenkins-slave'], } + exec { 'get_swarm_client': + command => $fetch_command, + path => '/usr/bin:/usr/sbin:/bin:/usr/local/bin', + user => $slave_user, + creates => "${slave_home}/${client_jar}", + cwd => $slave_home, + #refreshonly => true, + ## needs to be fixed if you create another version.. + } + service { 'jenkins-slave': ensure => $ensure, + name => $service_name, enable => $enable, hasstatus => true, hasrestart => true, diff --git a/spec/classes/jenkins_slave_spec.rb b/spec/classes/jenkins_slave_spec.rb index 97de47810..9ea568e71 100644 --- a/spec/classes/jenkins_slave_spec.rb +++ b/spec/classes/jenkins_slave_spec.rb @@ -4,7 +4,7 @@ shared_context 'a jenkins::slave catalog' do it { should contain_exec('get_swarm_client') } - it { should contain_file('/etc/init.d/jenkins-slave') } + it { should contain_file(slave_service_file) } it { should contain_service('jenkins-slave').with(:enable => true, :ensure => 'running') } it { should contain_user('jenkins-slave_user').with_uid(nil) } # Let the different platform blocks define `slave_runtime_file` separately below @@ -44,9 +44,9 @@ end describe 'RedHat' do - let(:facts) { { :osfamily => 'RedHat', :operatingsystem => 'CentOS' } } + let(:facts) { { :osfamily => 'RedHat', :operatingsystem => 'CentOS', :kernel => 'Linux' } } let(:slave_runtime_file) { '/etc/sysconfig/jenkins-slave' } - + let(:slave_service_file) { '/etc/init.d/jenkins-slave' } it_behaves_like 'a jenkins::slave catalog' describe 'with slave_name' do @@ -56,8 +56,9 @@ end describe 'Debian' do - let(:facts) { { :osfamily => 'Debian', :lsbdistid => 'debian', :lsbdistcodename => 'natty', :operatingsystem => 'Debian' } } + let(:facts) { { :osfamily => 'Debian', :lsbdistid => 'debian', :lsbdistcodename => 'natty', :operatingsystem => 'Debian', :kernel => 'Linux' } } let(:slave_runtime_file) { '/etc/default/jenkins-slave' } + let(:slave_service_file) { '/etc/init.d/jenkins-slave' } it_behaves_like 'a jenkins::slave catalog' @@ -67,6 +68,19 @@ end end +# describe 'Darwin' do +# let(:facts) { { :osfamily => 'Darwin', :operatingsystem => 'Darwin', :kernel => 'Darwin' } } +# let(:slave_runtime_file) { '/home/jenkins-slave/jenkins-slave' } +# let(:slave_service_file) { '/Library/LaunchDaemons/org.jenkins-ci.slave.jnlp.plist' } +# +# it_behaves_like 'a jenkins::slave catalog' +# +# describe 'with slave_name' do +# let(:params) { { :slave_name => 'jenkins-slave' } } +# it_behaves_like 'using slave_name' +# end +# end + describe 'Unknown' do let(:facts) { { :ostype => 'Unknown' } } it { expect { should raise_error(Puppet::Error) } } diff --git a/templates/org.jenkins-ci.slave.jnlp.plist.erb b/templates/org.jenkins-ci.slave.jnlp.plist.erb new file mode 100644 index 000000000..829ad5ebd --- /dev/null +++ b/templates/org.jenkins-ci.slave.jnlp.plist.erb @@ -0,0 +1,28 @@ + + + + + Label + org.jenkins-ci.slave.jnlp + ProgramArguments + + <%= @slave_home %>/start-slave.sh + + KeepAlive + + RunAtLoad + + UserName + <%= @slave_user %> + WorkingDirectory + <%= @slave_home %> + SessionCreate + + StandardInPath + /dev/null + StandardErrorPath + /var/log/jenkins/org.jenkins-ci.slave.jnlp.log + StandardOutPath + /var/log/jenkins/org.jenkins-ci.slave.jnlp.log + + diff --git a/templates/start-slave.sh.erb b/templates/start-slave.sh.erb new file mode 100644 index 000000000..ebec07754 --- /dev/null +++ b/templates/start-slave.sh.erb @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +source <%= @defaults_location %>/jenkins-slave +java -jar <%= @slave_home %>/<%= @client_jar %> $JENKINS_SLAVE_ARGS