diff --git a/.fixtures.yml b/.fixtures.yml new file mode 100644 index 0000000..c13aea6 --- /dev/null +++ b/.fixtures.yml @@ -0,0 +1,8 @@ +fixtures: + repositories: + 'stdlib': 'git://github.com/puppetlabs/puppetlabs-stdlib.git' + 'concat': 'git://github.com/puppetlabs/puppetlabs-concat.git' + 's3file': 'git://github.com/branan/puppet-module-s3file.git' + 'java' : 'git://github.com/puppetlabs/puppetlabs-java.git' + symlinks: + 'minecraft': "#{source_dir}" diff --git a/Modulefile b/Modulefile index c82f0ac..8c49d37 100644 --- a/Modulefile +++ b/Modulefile @@ -7,6 +7,7 @@ summary 'Minecraft Server' description 'Install and manage a Minecraft server' project_page 'https://github.com/branan/puppet-module-minecraft' -dependency 'branan/s3file', '>= 1.0.0' dependency 'puppetlabs/stdlib', '>= 2.2.0' -dependency 'puppetlabs/java', '>= 0.1.6' +dependency 'puppetlabs/concat', '>= 1.0.0' +dependency 'puppetlabs/java', '>= 0.1.6' +dependency 'branan/s3file', '>= 1.0.0' diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..cd3d379 --- /dev/null +++ b/Rakefile @@ -0,0 +1 @@ +require 'puppetlabs_spec_helper/rake_tasks' diff --git a/manifests/ban.pp b/manifests/ban.pp index f916f45..e6e956d 100644 --- a/manifests/ban.pp +++ b/manifests/ban.pp @@ -1,12 +1,18 @@ # Definition: minecraft::ban # -# This definition adds a player to the Minecraft server's ban list +# This definition adds an ip address to the Minecraft server's banned ip list # -define minecraft::ban () -{ - file_line { $name: - path =>"${minecraft::homedir}/banned-players.txt", - line => $name, - notify => Service['minecraft'], +define minecraft::ban( + $file = 'banned-players.txt', + $ensure = 'present' +){ + + include ::minecraft + + concat::fragment{"ban_fragment_${name}": + ensure => $ensure, + target => "${::minecraft::homedir}/${file}", + content => $name, + notify => Service['minecraft'] } -} +} \ No newline at end of file diff --git a/manifests/init.pp b/manifests/init.pp index 63c4d65..7301da8 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -24,13 +24,23 @@ $user = 'mcserver', $group = 'mcserver', $homedir = '/opt/minecraft', + $mode = '0644', $manage_java = true, $manage_screen = true, $manage_curl = true, $heap_size = 2048, - $heap_start = 512, -) -{ + $heap_start = 512 +){ + + validate_string($user) + validate_string($group) + validate_string($homedir) + validate_bool($manage_java) + validate_bool($manage_screen) + validate_bool($manage_curl) + validate_string($heap_size) + validate_string($heap_size) + if $manage_java { class { 'java': distribution => 'jre', @@ -49,7 +59,7 @@ before => S3file["${homedir}/minecraft_server.jar"], } } - + group { $group: ensure => present, } @@ -65,33 +75,41 @@ require => User[$user], } - file { "${homedir}/ops.txt": - ensure => present, - owner => $user, - group => $group, - mode => '0664', - } -> Minecraft::Op<| |> - - file { "${homedir}/banned-players.txt": - ensure => present, - owner => $user, - group => $group, - mode => '0664', - } -> Minecraft::Ban<| |> + concat{"${homedir}/banned-players.txt": + owner => $owner, + group => $group, + mode => $mode, + ensure_newline => true + } - file { "${homedir}/banned-ips.txt": - ensure => present, - owner => $user, - group => $group, - mode => '0664', - } -> Minecraft::Ipban<| |> + concat{"${homedir}/banned-ips.txt": + owner => $owner, + group => $group, + mode => $mode, + ensure_newline => true + } + + concat{"${homedir}/ops.txt": + owner => $owner, + group => $group, + mode => $mode, + ensure_newline => true + } + + concat{"${homedir}/white-list.txt": + owner => $owner, + group => $group, + mode => $mode, + ensure_newline => true, + } + - file { "${homedir}/white-list.txt": - ensure => present, - owner => $user, - group => $group, - mode => '0664', - } -> Minecraft::Whitelist<| |> + concat{"${homedir}/server.properties": + owner => $owner, + group => $group, + mode => $mode, + ensure_newline => true + } file { '/etc/init.d/minecraft': ensure => present, @@ -106,4 +124,4 @@ require => File['/etc/init.d/minecraft'], subscribe => S3file["${homedir}/minecraft_server.jar"], } -} +} \ No newline at end of file diff --git a/manifests/ipban.pp b/manifests/ipban.pp index 2936cf5..28adfe7 100644 --- a/manifests/ipban.pp +++ b/manifests/ipban.pp @@ -2,11 +2,17 @@ # # This definition adds an ip address to the Minecraft server's banned ip list # -define minecraft::ipban () -{ - file_line { $name: - path =>"${minecraft::homedir}/banned-ips.txt", - line => $name, - notify => Service['minecraft'], +define minecraft::ipban( + $file = 'banned-ips.txt', + $ensure = 'present' +){ + + include ::minecraft + + concat::fragment{"ipban_fragment_${name}": + ensure => $ensure, + target => "${::minecraft::homedir}/${file}", + content => $name, + notify => Service['minecraft'] } -} +} \ No newline at end of file diff --git a/manifests/op.pp b/manifests/op.pp index 3ed7ece..695d1ba 100644 --- a/manifests/op.pp +++ b/manifests/op.pp @@ -2,11 +2,17 @@ # # This definition adds a player to the Minecraft server's auto-op list # -define minecraft::op () -{ - file_line { $name: - path =>"${minecraft::homedir}/ops.txt", - line => $name, - notify => Service['minecraft'], +define minecraft::op( + $file = 'ops.txt', + $ensure = 'present' +){ + + include ::minecraft + + concat::fragment{"op_fragment_${name}": + ensure => $ensure, + target => "${::minecraft::homedir}/${file}", + content => $name, + notify => Service['minecraft'] } -} +} \ No newline at end of file diff --git a/manifests/server_prop.pp b/manifests/server_prop.pp index 913daed..f7cc075 100644 --- a/manifests/server_prop.pp +++ b/manifests/server_prop.pp @@ -12,14 +12,18 @@ # value => 'true' # } # -define minecraft::server_prop ( +define minecraft::server_prop( + $file = 'server.properties', + $ensure = 'present', $value, -) -{ - file_line { $name: - path => "${minecraft::homedir}/server.properties", - line => "${name}=${value}", - match => "${name}=.*", - notify => Service['minecraft'], +){ + + include ::minecraft + + concat::fragment{"server_prop_fragment_${name}": + ensure => $ensure, + target => "${::minecraft::homedir}/${file}", + content => "${name}=${value}", + notify => Service['minecraft'] } } diff --git a/manifests/whitelist.pp b/manifests/whitelist.pp index 95301cd..94a5076 100644 --- a/manifests/whitelist.pp +++ b/manifests/whitelist.pp @@ -2,11 +2,17 @@ # # This definition adds a player to the Minecraft server's whitelist # -define minecraft::whitelist () -{ - file_line { $name: - path =>"${minecraft::homedir}/white-list.txt", - line => $name, - notify => Service['minecraft'], +define minecraft::whitelist( + $file = 'white-list.txt', + $ensure = 'present' +){ + + include ::minecraft + + concat::fragment{"whitelist_fragment_${name}": + ensure => $ensure, + target => "${::minecraft::homedir}/${file}", + content => $name, + notify => Service['minecraft'] } } diff --git a/spec/classes/minecraft_spec.rb b/spec/classes/minecraft_spec.rb new file mode 100644 index 0000000..b0c62e9 --- /dev/null +++ b/spec/classes/minecraft_spec.rb @@ -0,0 +1,55 @@ +require 'spec_helper' + +describe 'minecraft', :type => :class do + let(:facts) do { + :osfamily => 'Debian', + :lsbdistcodename => 'raring', + :concat_basedir => '/dne' + } end + let(:default_params) do { + :user => 'foo', + :group => 'bar', + :homedir => '/baz/qux', + :manage_java => true, + :manage_screen => true, + :manage_curl => true, + :heap_size => '2048', + :heap_start => '512' + } end + context 'by default' do + let(:params) do default_params end + it { should include_class('minecraft') } + it { should contain_class('java').with({ + :distribution => 'jre', + :before => 'Service[minecraft]' + }) } + it { should contain_package('screen').with({ + :before => 'Service[minecraft]' + }) } + it { should contain_package('curl').with({ + :before => 'S3file[/baz/qux/minecraft_server.jar]' + }) } + it { should contain_user('foo').with({ + :gid => 'bar', + :home => '/baz/qux', + :managehome => true, + }) } + it { should contain_group('bar').with({ + :ensure => 'present' + }) } + it { should contain_s3file('/baz/qux/minecraft_server.jar').with({ + :source => 'MinecraftDownload/launcher/minecraft_server.jar', + :require => 'User[foo]' + }) } + ['/baz/qux/banned-players.txt','/baz/qux/banned-ips.txt', + '/baz/qux/white-list.txt','/baz/qux/ops.txt'].each do |file| + it { should contain_file(file) } + end + it { should contain_file('/etc/init.d/minecraft').with({ + :ensure => 'present', + :owner => 'root', + :group => 'root', + :mode => '0744' + }).with_content(/MAX_HEAP="2048"\nMIN_HEAP="512"/) } + end +end \ No newline at end of file diff --git a/spec/defines/minecraft_ban_spec.rb b/spec/defines/minecraft_ban_spec.rb new file mode 100644 index 0000000..8a04796 --- /dev/null +++ b/spec/defines/minecraft_ban_spec.rb @@ -0,0 +1,34 @@ +require 'spec_helper' + +describe 'minecraft::ban', :type => :define do + let(:title) { 'fooplayer' } + let(:facts) do { + :concat_basedir => '/dne', + :osfamily => 'Debian', + :lsbdistcodename => 'raring' + } end + let(:default_params) do { + :file => 'banned-players.txt', + :ensure => 'present' + } end + context 'with ensure set to present' do + let(:params) do default_params end + it { should contain_minecraft__ban('fooplayer') } + it { should contain_concat__fragment('ban_fragment_fooplayer').with({ + :ensure => 'present', + :target => '/opt/minecraft/banned-players.txt', + :content => 'fooplayer', + :notify => 'Service[minecraft]' + }) } + end + context 'with ensure set to absent' do + let(:params) do default_params.merge!({ :ensure => 'absent'}) end + it { should contain_minecraft__ban('fooplayer') } + it { should contain_concat__fragment('ban_fragment_fooplayer').with({ + :ensure => 'absent', + :target => '/opt/minecraft/banned-players.txt', + :content => 'fooplayer', + :notify => 'Service[minecraft]' + }) } + end +end \ No newline at end of file diff --git a/spec/defines/minecraft_ipban_spec.rb b/spec/defines/minecraft_ipban_spec.rb new file mode 100644 index 0000000..c7b6002 --- /dev/null +++ b/spec/defines/minecraft_ipban_spec.rb @@ -0,0 +1,34 @@ +require 'spec_helper' + +describe 'minecraft::ipban', :type => :define do + let(:title) { 'fooplayer' } + let(:facts) do { + :concat_basedir => '/dne', + :osfamily => 'Debian', + :lsbdistcodename => 'raring' + } end + let(:default_params) do { + :file => 'banned-ips.txt', + :ensure => 'present' + } end + context 'with ensure set to present' do + let(:params) do default_params end + it { should contain_minecraft__ipban('fooplayer') } + it { should contain_concat__fragment('ipban_fragment_fooplayer').with({ + :ensure => 'present', + :target => '/opt/minecraft/banned-ips.txt', + :content => 'fooplayer', + :notify => 'Service[minecraft]' + }) } + end + context 'with ensure set to absent' do + let(:params) do default_params.merge!({ :ensure => 'absent'}) end + it { should contain_minecraft__ipban('fooplayer') } + it { should contain_concat__fragment('ipban_fragment_fooplayer').with({ + :ensure => 'absent', + :target => '/opt/minecraft/banned-ips.txt', + :content => 'fooplayer', + :notify => 'Service[minecraft]' + }) } + end +end \ No newline at end of file diff --git a/spec/defines/minecraft_op_spec.rb b/spec/defines/minecraft_op_spec.rb new file mode 100644 index 0000000..823a107 --- /dev/null +++ b/spec/defines/minecraft_op_spec.rb @@ -0,0 +1,34 @@ +require 'spec_helper' + +describe 'minecraft::op', :type => :define do + let(:title) { 'fooplayer' } + let(:facts) do { + :concat_basedir => '/dne', + :osfamily => 'Debian', + :lsbdistcodename => 'raring' + } end + let(:default_params) do { + :file => 'ops.txt', + :ensure => 'present' + } end + context 'with ensure set to present' do + let(:params) do default_params end + it { should contain_minecraft__op('fooplayer') } + it { should contain_concat__fragment('op_fragment_fooplayer').with({ + :ensure => 'present', + :target => '/opt/minecraft/ops.txt', + :content => 'fooplayer', + :notify => 'Service[minecraft]' + }) } + end + context 'with ensure set to absent' do + let(:params) do default_params.merge!({ :ensure => 'absent'}) end + it { should contain_minecraft__op('fooplayer') } + it { should contain_concat__fragment('op_fragment_fooplayer').with({ + :ensure => 'absent', + :target => '/opt/minecraft/ops.txt', + :content => 'fooplayer', + :notify => 'Service[minecraft]' + }) } + end +end \ No newline at end of file diff --git a/spec/defines/minecraft_server_prop._spec.rb b/spec/defines/minecraft_server_prop._spec.rb new file mode 100644 index 0000000..a5601c3 --- /dev/null +++ b/spec/defines/minecraft_server_prop._spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe 'minecraft::server_prop', :type => :define do + let(:title) { 'foo_key' } + let(:facts) do { + :concat_basedir => '/dne', + :osfamily => 'Debian', + :lsbdistcodename => 'raring' + } end + let(:default_params) do { + :file => 'server.properties', + :ensure => 'present', + :value => 'foo_value' + } end + context 'with ensure set to present' do + let(:params) do default_params end + it { should contain_minecraft__server_prop('foo_key').with({ :value => 'foo_value' }) } + it { should contain_concat__fragment('server_prop_fragment_foo_key').with({ + :ensure => 'present', + :target => '/opt/minecraft/server.properties', + :content => 'foo_key=foo_value', + :notify => 'Service[minecraft]' + }) } + end + context 'with ensure set to absent' do + let(:params) do default_params.merge!({ :ensure => 'absent'}) end + it { should contain_minecraft__server_prop('foo_key') } + it { should contain_concat__fragment('server_prop_fragment_foo_key').with({ + :ensure => 'absent', + :target => '/opt/minecraft/server.properties', + :content => 'foo_key=foo_value', + :notify => 'Service[minecraft]' + }) } + end +end \ No newline at end of file diff --git a/spec/defines/minecraft_whitelist_spec.rb b/spec/defines/minecraft_whitelist_spec.rb new file mode 100644 index 0000000..8b2c019 --- /dev/null +++ b/spec/defines/minecraft_whitelist_spec.rb @@ -0,0 +1,34 @@ +require 'spec_helper' + +describe 'minecraft::whitelist', :type => :define do + let(:title) { 'fooplayer' } + let(:facts) do { + :concat_basedir => '/dne', + :osfamily => 'Debian', + :lsbdistcodename => 'raring' + } end + let(:default_params) do { + :file => 'white-list.txt', + :ensure => 'present' + } end + context 'with ensure set to present' do + let(:params) do default_params end + it { should contain_minecraft__whitelist('fooplayer') } + it { should contain_concat__fragment('whitelist_fragment_fooplayer').with({ + :ensure => 'present', + :target => '/opt/minecraft/white-list.txt', + :content => 'fooplayer', + :notify => 'Service[minecraft]' + }) } + end + context 'with ensure set to absent' do + let(:params) do default_params.merge!({ :ensure => 'absent'}) end + it { should contain_minecraft__whitelist('fooplayer') } + it { should contain_concat__fragment('whitelist_fragment_fooplayer').with({ + :ensure => 'absent', + :target => '/opt/minecraft/white-list.txt', + :content => 'fooplayer', + :notify => 'Service[minecraft]' + }) } + end +end \ No newline at end of file diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..2c6f566 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1 @@ +require 'puppetlabs_spec_helper/module_spec_helper'