diff --git a/.gitignore b/.gitignore index 52146d6..39781c2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ modules/ +.onceover diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..df9f1c7 --- /dev/null +++ b/Gemfile @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } + +# gem "rails" +gem "onceover" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..973766e --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,133 @@ +GEM + remote: https://rubygems.org/ + specs: + backticks (1.0.2) + blockenspiel (0.5.0) + colored (1.2) + colored2 (3.1.2) + concurrent-ruby (1.1.6) + cri (2.15.10) + deep_merge (1.2.1) + diff-lcs (1.3) + facter (2.5.7) + faraday (0.17.3) + multipart-post (>= 1.2, < 3) + faraday_middleware (0.14.0) + faraday (>= 0.7.4, < 1.0) + fast_gettext (1.1.2) + gettext (3.2.9) + locale (>= 2.0.5) + text (>= 1.3.0) + gettext-setup (0.34) + fast_gettext (~> 1.1.0) + gettext (>= 3.0.2, < 3.3.0) + locale + git (1.6.0) + rchardet (~> 1.8) + hiera (3.6.0) + hocon (1.3.0) + httpclient (2.8.3) + little-plugger (1.1.4) + locale (2.1.3) + log4r (1.1.10) + logging (2.2.2) + little-plugger (~> 1.1) + multi_json (~> 1.10) + minitar (0.9) + mocha (1.11.2) + multi_json (1.14.1) + multipart-post (2.1.1) + onceover (3.15.2) + backticks (>= 1.0.2) + colored (~> 1.2) + cri (>= 2.6) + deep_merge (>= 1.0.0) + facter (< 4.0.0) + git + logging (>= 2.0.0) + multi_json (~> 1.10) + parallel_tests (>= 2.0.0) + puppet (>= 3.4.0) + puppetlabs_spec_helper (>= 0.4.0) + r10k (>= 2.1.0) + rake (>= 10.0.0) + rspec (>= 3.0.0) + rspec-puppet (>= 2.4.0) + rspec_junit_formatter (>= 0.2.0) + table_print (>= 1.0.0) + versionomy (>= 0.5.0) + parallel (1.19.1) + parallel_tests (2.32.0) + parallel + pathspec (0.2.1) + puppet (6.14.0) + concurrent-ruby (~> 1.0) + deep_merge (~> 1.0) + facter (> 2.0.1, < 5) + fast_gettext (~> 1.1) + hiera (>= 3.2.1, < 4) + httpclient (~> 2.8) + locale (~> 2.1) + multi_json (~> 1.10) + puppet-resource_api (~> 1.5) + semantic_puppet (~> 1.0) + puppet-lint (2.4.2) + puppet-resource_api (1.8.12) + hocon (>= 1.0) + puppet-syntax (2.6.1) + puppet (>= 5) + rake + puppet_forge (2.3.4) + faraday (>= 0.9.0, < 0.18.0, != 0.13.1) + faraday_middleware (>= 0.9.0, < 0.15.0) + gettext-setup (~> 0.11) + minitar + semantic_puppet (~> 1.0) + puppetlabs_spec_helper (2.14.1) + mocha (~> 1.0) + pathspec (~> 0.2.1) + puppet-lint (~> 2.0) + puppet-syntax (~> 2.0) + rspec-puppet (~> 2.0) + r10k (3.4.1) + colored2 (= 3.1.2) + cri (>= 2.15.10, < 3.0.0) + fast_gettext (~> 1.1.0) + gettext (>= 3.0.2, < 3.3.0) + gettext-setup (~> 0.24) + log4r (= 1.1.10) + multi_json (~> 1.10) + puppet_forge (~> 2.3.0) + rake (13.0.1) + rchardet (1.8.0) + rspec (3.9.0) + rspec-core (~> 3.9.0) + rspec-expectations (~> 3.9.0) + rspec-mocks (~> 3.9.0) + rspec-core (3.9.1) + rspec-support (~> 3.9.1) + rspec-expectations (3.9.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.9.0) + rspec-mocks (3.9.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.9.0) + rspec-puppet (2.7.8) + rspec + rspec-support (3.9.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + semantic_puppet (1.0.2) + table_print (1.5.6) + text (1.3.1) + versionomy (0.5.0) + blockenspiel (~> 0.5) + +PLATFORMS + ruby + +DEPENDENCIES + onceover + +BUNDLED WITH + 2.1.4 diff --git a/Puppetfile b/Puppetfile index 300ddf1..bb3ad3d 100644 --- a/Puppetfile +++ b/Puppetfile @@ -26,9 +26,6 @@ mod 'puppetlabs/apt','7.1.0' mod 'puppetlabs/facts','0.6.0' mod 'puppetlabs/inifile','2.4.0' mod 'danieldreier-autosign','0.2.0' -mod 'tkishel-unlock_puppet', - :git => 'ssh://git@github.com/tkishel/unlock_puppet.git', - :branch => 'master' mod 'puppetlabs-firewall', '2.0.0' mod 'puppetlabs-satellite_pe_tools', '2.0.0' mod 'puppetlabs-puppet_metrics_collector', '5.2.0' diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..d0372d4 --- /dev/null +++ b/Rakefile @@ -0,0 +1 @@ +require 'onceover/rake_tasks' diff --git a/site-modules/controlm/manifests/controlm_agent/install.pp b/site-modules/controlm/manifests/controlm_agent/install.pp index 4113706..bf954ca 100644 --- a/site-modules/controlm/manifests/controlm_agent/install.pp +++ b/site-modules/controlm/manifests/controlm_agent/install.pp @@ -6,15 +6,15 @@ class controlm::controlm_agent::install inherits controlm::controlm_agent { augeas { 'controlm': context => '/files/etc/services', changes => [ - "set service-name[port = '${s2a_port}'][protocol = 'udp'] ctmagent", - "set service-name[port = '${s2a_port}'][protocol = 'udp']/#comment 'Control-M server2agent'", - "set service-name[port = '${s2a_port}'][protocol = 'tcp'] ctmagent", - "set service-name[port = '${s2a_port}'][protocol = 'tcp']/#comment 'Control-M server2agent'", - "set service-name[port = '${a2s_port}'][protocol = 'udp'] ctmagent", - "set service-name[port = '${a2s_port}'][protocol = 'udp']/#comment 'Control-M agent2server'", - "set service-name[port = '${a2s_port}'][protocol = 'tcp'] ctmagent", - "set service-name[port = '${a2s_port}'][protocol = 'tcp']/#comment 'Control-M agent2server'", - ], + "set service-name[port = '${s2a_port}'][protocol = 'udp'] ctmagent", + "set service-name[port = '${s2a_port}'][protocol = 'udp']/#comment 'Control-M server2agent'", + "set service-name[port = '${s2a_port}'][protocol = 'tcp'] ctmagent", + "set service-name[port = '${s2a_port}'][protocol = 'tcp']/#comment 'Control-M server2agent'", + "set service-name[port = '${a2s_port}'][protocol = 'udp'] ctmagent", + "set service-name[port = '${a2s_port}'][protocol = 'udp']/#comment 'Control-M agent2server'", + "set service-name[port = '${a2s_port}'][protocol = 'tcp'] ctmagent", + "set service-name[port = '${a2s_port}'][protocol = 'tcp']/#comment 'Control-M agent2server'", + ], } # use shellscript and sudo as running the install direct as user ctmagent gives HOME errors plus we get errors in the log file diff --git a/site-modules/role/manifests/windowsnode.pp b/site-modules/role/manifests/windowsnode.pp index 5ea55b7..427152f 100644 --- a/site-modules/role/manifests/windowsnode.pp +++ b/site-modules/role/manifests/windowsnode.pp @@ -10,6 +10,7 @@ class role::windowsnode { name => 'testuser111', ensure => present, groups => 'testgroup111', +# require => Group['testgroup'], } ### diff --git a/spec/factsets/README.md b/spec/factsets/README.md new file mode 100644 index 0000000..dd72566 --- /dev/null +++ b/spec/factsets/README.md @@ -0,0 +1,7 @@ +# Factsets + +This directory is where we put any custom factsets that we want to use. They can be generated by running `puppet facts` on the target system. + +**Hot tip:** If you already have factsets in here when you run `onceover init` they will be picked up and added to the config file Automatically + +More info: https://github.com/dylanratcliffe/onceover#factsets diff --git a/spec/onceover.yaml b/spec/onceover.yaml new file mode 100644 index 0000000..d574efa --- /dev/null +++ b/spec/onceover.yaml @@ -0,0 +1,78 @@ +# Classes to be tested +classes: + - role::database_server + - role::windowsnode + - role::webserver + - role::goldload_server + - role::loadbalancer + - role::example + - role::callaugeas + +# Nodes to tests classes on, this refers to a 'factset' or 'nodeset' +# depending on whether you are running 'spec' or 'acceptance' tests +nodes: +# - AIX-7.1-powerpc + - SLES-12.1-64 + - Debian-6.0.10-32 + - CentOS-6.6-64 + - Ubuntu-12.04-32 + - Amazon-2018.03 + - Ubuntu-12.04-64 + - CentOS-6.6-32 + - Debian-6.0.10-64 +# - AIX-6.1-powerpc + - Windows_Server-2012r2-64 + - RHEL-7.4 + - Debian-7.8-32 + - windows-10-64 + - Windows_Server-2008r2-64 + - SLES-11.3-64 +# - Debian-7.8-64 + - solaris-10_u9-sparc-64 + - solaris-11.2-sparc-64 + - Ubuntu-14.04-32 + - CentOS-5.11-64 + - CentOS-5.11-32 + - RHEL-6.7 + - CentOS-7.0-64 + - Ubuntu-14.04-64 + +# You can group classes here to save typing +class_groups: + special_classes: + - 'role::callaugeas' + - 'role::loadbalancer' + + general_classes: + include: 'all_classes' + exclude: 'special_classes' + non_windows_classes: + include: 'all_classes' + exclude: 'role::callaugeas' + +# You can group nodes here to save typing +# We have created a 'non_windows_nodes' group because we can't +# give you Windows vagrant boxes to test with because licensing, +# we can give you fact sets though so go crazy with spec testing! +node_groups: + windows_nodes: + - Windows_Server-2012r2-64 + - windows-10-64 + - Windows_Server-2008r2-64 + non_windows_nodes: + include: 'all_nodes' + exclude: 'windows_nodes' + test_callaugeas_nodes: + - RHEL-7.4 + - RHEL-6.7 +test_matrix: + - all_nodes: + classes: 'general_classes' + tests: 'spec' + - non_windows_nodes: + classes: 'non_windows_classes' + tests: 'spec' + - test_callaugeas_nodes: + classes: 'role::callaugeas' + tests: 'spec' + diff --git a/spec/pre_conditions/README.md b/spec/pre_conditions/README.md new file mode 100644 index 0000000..f0a81bf --- /dev/null +++ b/spec/pre_conditions/README.md @@ -0,0 +1,24 @@ +# Pre Conditions + +This folder should contain any \*.pp files that you want to be included in every test. + +A common use of this is defining resources that may not exist in the catalog when you are running tests. For example, if we are using a resource that tries to restart the `pe-puppetserver` service, unless it is compiled on a Puppet Maser the `pe-puppetserver` service will not exist and the catalog will fail to compile. To get around this we can create a .pp file and define the resource like so: + +``` puppet +# We are not going to actually have this service anywhere on our servers but +# our code needs to refresh it. This is to trick puppet into doing nothing +service { 'pe-puppetserver': + ensure => 'running', + enable => false, + hasrestart => false, # Force Puppet to use start and stop to restart + start => 'echo "Start"', # This will always exit 0 + stop => 'echo "Stop"', # This will also always exit 0 + hasstatus => false, # Force puppet to use our command for status + status => 'echo "Status"', # This will always exit 0 and therefore Puppet will think the service is running + provider => 'base', +} +``` + +This will mean that the `pe-puppetserver` service is in the catalog for spec testing and will even allow you to try to restart it during acceptance tests without the service actually being present. + +More info: https://github.com/dylanratcliffe/onceover#using-workarounds