From 73fa4d88b726e37d204927b756bb10f89340c742 Mon Sep 17 00:00:00 2001 From: Steven Pritchard Date: Wed, 16 Apr 2025 15:53:12 -0500 Subject: [PATCH 1/5] Switch to OpenVox * Replace the agent and server packages with OpenVox * Drop `puppet` from descriptions and other strings where possible Fixes #69 --- README.md | 14 +-- Vagrantfile | 20 ++-- data/common.yaml | 2 +- data/nodes/puppet.vagrant.yaml | 2 +- site/profile/REFERENCE.md | 99 ++++++++++++++----- site/profile/data/common.yaml | 3 +- site/profile/manifests/puppetserver.pp | 27 ----- .../profile/manifests/puppetserver/install.pp | 9 -- .../profile/manifests/puppetserver/service.pp | 10 -- site/profile/manifests/server.pp | 27 +++++ .../{puppetserver => server}/config.pp | 4 +- site/profile/manifests/server/install.pp | 15 +++ site/profile/manifests/server/service.pp | 18 ++++ .../{puppetserver => server}/config_spec.rb | 4 +- .../{puppetserver => server}/install_spec.rb | 2 +- .../{puppetserver => server}/service_spec.rb | 2 +- .../{puppetserver_spec.rb => server_spec.rb} | 2 +- site/profile/templates/autosign.conf.epp | 2 +- site/role/REFERENCE.md | 53 +++++++--- ...remote.rb => role__server__r10k_remote.rb} | 2 +- .../manifests/{puppetserver.pp => server.pp} | 6 +- site/role/plans/init.pp | 82 ++++++++------- .../{puppetserver_spec.rb => server_spec.rb} | 4 +- ...c.rb => role__server__r10k_remote_spec.rb} | 6 +- spec/puppet/sample_spec.rb | 12 +-- 25 files changed, 264 insertions(+), 163 deletions(-) delete mode 100644 site/profile/manifests/puppetserver.pp delete mode 100644 site/profile/manifests/puppetserver/install.pp delete mode 100644 site/profile/manifests/puppetserver/service.pp create mode 100644 site/profile/manifests/server.pp rename site/profile/manifests/{puppetserver => server}/config.pp (80%) create mode 100644 site/profile/manifests/server/install.pp create mode 100644 site/profile/manifests/server/service.pp rename site/profile/spec/classes/{puppetserver => server}/config_spec.rb (83%) rename site/profile/spec/classes/{puppetserver => server}/install_spec.rb (82%) rename site/profile/spec/classes/{puppetserver => server}/service_spec.rb (82%) rename site/profile/spec/classes/{puppetserver_spec.rb => server_spec.rb} (85%) rename site/role/lib/facter/{role__puppetserver__r10k_remote.rb => role__server__r10k_remote.rb} (88%) rename site/role/manifests/{puppetserver.pp => server.pp} (63%) rename site/role/spec/classes/{puppetserver_spec.rb => server_spec.rb} (89%) rename site/role/spec/unit/facter/{role__puppetserver__r10k_remote_spec.rb => role__server__r10k_remote_spec.rb} (90%) diff --git a/README.md b/README.md index 3275241..21cbbdb 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # basic-aio -## Bootstrap a basic Puppet environment using AIO packages +## Bootstrap a basic OpenVox environment + +The production branch of this repo contains a Vagrantfile that will build an OpenVox +server and agent with the following configured out of the box: -The production branch of this repo contains a Vagrantfile that will build a Puppet -server using the Puppet all-in-one packages with the following configured -out of the box: * [r10k](https://forge.puppet.com/puppet/r10k) (with this repo as its control repo) * [Choria mcollective](http://choria.io/) -* [PuppetDB](https://puppet.com/docs/puppetdb/) +* [openvoxdb](https://puppet.com/docs/puppetdb/) ## Prerequisites @@ -21,8 +21,8 @@ The following environment variables are used to configure the Vagrant environmen | Environment variable | Default value | Description | | -------------------- | ------------- | ----------- | | `IP_SUBNET` | `192.168.32` | The internal IP subnet used by Vagrant | -| `PUPPET_VERSION` | none (use the latest) | The Puppet agent version | -| `PUPPET_RELEASE` | `8` | The Puppet major release version | +| `OPENVOX_VERSION` | none (use the latest) | The OpenVox agent version | +| `OPENVOX_RELEASE` | `8` | The OpenVox major release version | | `EL_RELEASE` | `9` | The EL release of the base box | | `EL_OS_NAME` | `centos` | The base box OS | | `BOX` | Depends on EL_OS_NAME | The base box name | diff --git a/Vagrantfile b/Vagrantfile index a414008..cb9ec3a 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -3,8 +3,8 @@ ENV['VAGRANT_EXPERIMENTAL'] = 'typed_triggers' ip_subnet = ENV.fetch('IP_SUBNET', '192.168.32') -puppet_version = ENV.fetch('PUPPET_VERSION', '') -puppet_release = puppet_version.empty? ? ENV.fetch('PUPPET_RELEASE', '8') : puppet_version.split('.').first +openvox_version = ENV.fetch('OPENVOX_VERSION', '') +openvox_release = openvox_version.empty? ? ENV.fetch('OPENVOX_RELEASE', '8') : openvox_version.split('.').first el_release = ENV.fetch('EL_RELEASE', '9') el_os_name = ENV.fetch('EL_OS_NAME', 'centos') def select_box(el_os_name, el_release) @@ -45,22 +45,22 @@ Vagrant.configure('2') do |config| config.vm.box = box config.ssh.forward_agent = true - config.vm.define 'puppet' do |puppetserver| - puppetserver.vm.provider 'virtualbox' do |vb| + config.vm.define 'puppet' do |server| + server.vm.provider 'virtualbox' do |vb| vb.memory = '4096' vb.cpus = 2 vb.name = 'puppet.vagrant' end - puppetserver.vm.provider 'libvirt' do |libvirt| + server.vm.provider 'libvirt' do |libvirt| libvirt.memory = '4096' libvirt.cpus = 2 libvirt.qemu_use_session = false end - puppetserver.vm.hostname = 'puppet.vagrant' - puppetserver.vm.network 'private_network', ip: "#{ip_subnet}.5" - puppetserver.vm.synced_folder '.', '/vagrant', + server.vm.hostname = 'puppet.vagrant' + server.vm.network 'private_network', ip: "#{ip_subnet}.5" + server.vm.synced_folder '.', '/vagrant', type: 'rsync', rsync__exclude: ['spec/fixtures/modules/'] end @@ -89,8 +89,8 @@ Vagrant.configure('2') do |config| trigger.run = { inline: [ 'bolt plan run role -t all --run-as root', - "puppet_release=#{puppet_release}", - "puppet_version=#{puppet_version}", + "openvox_release=#{openvox_release}", + "openvox_version=#{openvox_version}", ].concat(bolt_debug_options) .concat(stream ? ['--stream'] : []) .concat(native_ssh ? ['--native-ssh'] : []) diff --git a/data/common.yaml b/data/common.yaml index b2a2136..beaf572 100644 --- a/data/common.yaml +++ b/data/common.yaml @@ -11,7 +11,7 @@ mcollective::site_policies: r10k::remote: "%{facts.role__puppetserver__r10k_remote}" -profile::puppetserver::config::autosign: +profile::server::config::autosign: - "*.%{facts.networking.domain}" - vagrant.mcollective diff --git a/data/nodes/puppet.vagrant.yaml b/data/nodes/puppet.vagrant.yaml index b02525e..e536c77 100644 --- a/data/nodes/puppet.vagrant.yaml +++ b/data/nodes/puppet.vagrant.yaml @@ -1,5 +1,5 @@ --- classes: - - role::puppetserver + - role::server mcollective::client: true diff --git a/site/profile/REFERENCE.md b/site/profile/REFERENCE.md index 80d3571..d6256d9 100644 --- a/site/profile/REFERENCE.md +++ b/site/profile/REFERENCE.md @@ -9,10 +9,10 @@ * [`profile::agent`](#profile--agent): Configures the `puppet` service * [`profile::base`](#profile--base): Base OS customization * [`profile::puppetdb`](#profile--puppetdb): Configure puppetdb -* [`profile::puppetserver`](#profile--puppetserver): Configure puppetserver -* [`profile::puppetserver::config`](#profile--puppetserver--config): Configures the puppet server -* [`profile::puppetserver::install`](#profile--puppetserver--install): Install puppetserver package -* [`profile::puppetserver::service`](#profile--puppetserver--service): Configure puppetserver service +* [`profile::server`](#profile--server): Configure server +* [`profile::server::config`](#profile--server--config): Configures the puppet server +* [`profile::server::install`](#profile--server--install): Install server package +* [`profile::server::service`](#profile--server--service): Configure server service ## Classes @@ -90,33 +90,33 @@ Configure puppetdb include profile::puppetdb ``` -### `profile::puppetserver` +### `profile::server` -Configure puppetserver +Configure server #### Examples ##### ```puppet -include profile::puppetserver +include profile::server ``` #### Parameters -The following parameters are available in the `profile::puppetserver` class: +The following parameters are available in the `profile::server` class: -* [`manage_firewall`](#-profile--puppetserver--manage_firewall) +* [`manage_firewall`](#-profile--server--manage_firewall) -##### `manage_firewall` +##### `manage_firewall` Data type: `Boolean` -Manage the puppetserver firewall configuration +Manage the server firewall configuration Default value: `true` -### `profile::puppetserver::config` +### `profile::server::config` Configures the puppet server @@ -125,42 +125,97 @@ Configures the puppet server ##### ```puppet -include profile::puppetserver::config +include profile::server::config ``` #### Parameters -The following parameters are available in the `profile::puppetserver::config` class: +The following parameters are available in the `profile::server::config` class: -* [`autosign`](#-profile--puppetserver--config--autosign) +* [`autosign`](#-profile--server--config--autosign) -##### `autosign` +##### `autosign` Data type: `Array[String]` List of certnames or domain name globs -### `profile::puppetserver::install` +### `profile::server::install` -Install puppetserver package +Install server package #### Examples ##### ```puppet -include profile::puppetserver::install +include profile::server::install ``` -### `profile::puppetserver::service` +#### Parameters + +The following parameters are available in the `profile::server::install` class: + +* [`package`](#-profile--server--install--package) +* [`package_ensure`](#-profile--server--install--package_ensure) + +##### `package` + +Data type: `String[1]` + +The name of the package to install + +Default value: `'openvox-server'` + +##### `package_ensure` -Configure puppetserver service +Data type: `String[1]` + +The ensure value for the package + +Default value: `'installed'` + +### `profile::server::service` + +Configure server service #### Examples ##### ```puppet -include profile::puppetserver::service +include profile::server::service ``` +#### Parameters + +The following parameters are available in the `profile::server::service` class: + +* [`service_name`](#-profile--server--service--service_name) +* [`service_ensure`](#-profile--server--service--service_ensure) +* [`service_enable`](#-profile--server--service--service_enable) + +##### `service_name` + +Data type: `String[1]` + +The name of the service to manage + +Default value: `'puppetserver'` + +##### `service_ensure` + +Data type: `String[1]` + +The ensure value for the service + +Default value: `'running'` + +##### `service_enable` + +Data type: `Boolean` + +Whether to enable the service at boot + +Default value: `true` + diff --git a/site/profile/data/common.yaml b/site/profile/data/common.yaml index bb36a7a..82a4f89 100644 --- a/site/profile/data/common.yaml +++ b/site/profile/data/common.yaml @@ -1,8 +1,7 @@ --- profile::base::packages: [] -profile::puppetserver::install::package: puppetserver -profile::puppetserver::config::autosign: [] +profile::server::config::autosign: [] profile::agent::service: puppet profile::agent::service_ensure: running diff --git a/site/profile/manifests/puppetserver.pp b/site/profile/manifests/puppetserver.pp deleted file mode 100644 index 2b7f3e0..0000000 --- a/site/profile/manifests/puppetserver.pp +++ /dev/null @@ -1,27 +0,0 @@ -# @summary Configure puppetserver -# -# @param manage_firewall Manage the puppetserver firewall configuration -# -# @example -# include profile::puppetserver -class profile::puppetserver ( - Boolean $manage_firewall = true, -) { - if $manage_firewall { - include 'firewalld' - - firewalld_service { 'puppetmaster': - ensure => present, - zone => 'public', - service => 'puppetmaster', - } - } - - include 'profile::puppetserver::install' - include 'profile::puppetserver::config' - include 'profile::puppetserver::service' - - Class['profile::puppetserver::install'] - -> Class['profile::puppetserver::config'] - ~> Class['profile::puppetserver::service'] -} diff --git a/site/profile/manifests/puppetserver/install.pp b/site/profile/manifests/puppetserver/install.pp deleted file mode 100644 index f7864ee..0000000 --- a/site/profile/manifests/puppetserver/install.pp +++ /dev/null @@ -1,9 +0,0 @@ -# @summary Install puppetserver package -# -# @example -# include profile::puppetserver::install -class profile::puppetserver::install { - package { 'puppetserver': - ensure => installed, - } -} diff --git a/site/profile/manifests/puppetserver/service.pp b/site/profile/manifests/puppetserver/service.pp deleted file mode 100644 index 71f2a4b..0000000 --- a/site/profile/manifests/puppetserver/service.pp +++ /dev/null @@ -1,10 +0,0 @@ -# @summary Configure puppetserver service -# -# @example -# include profile::puppetserver::service -class profile::puppetserver::service { - service { 'puppetserver': - ensure => running, - enable => true, - } -} diff --git a/site/profile/manifests/server.pp b/site/profile/manifests/server.pp new file mode 100644 index 0000000..d314562 --- /dev/null +++ b/site/profile/manifests/server.pp @@ -0,0 +1,27 @@ +# @summary Configure server +# +# @param manage_firewall Manage the server firewall configuration +# +# @example +# include profile::server +class profile::server ( + Boolean $manage_firewall = true, +) { + if $manage_firewall { + include 'firewalld' + + firewalld_service { 'puppetmaster': + ensure => present, + zone => 'public', + service => 'puppetmaster', + } + } + + include 'profile::server::install' + include 'profile::server::config' + include 'profile::server::service' + + Class['profile::server::install'] + -> Class['profile::server::config'] + ~> Class['profile::server::service'] +} diff --git a/site/profile/manifests/puppetserver/config.pp b/site/profile/manifests/server/config.pp similarity index 80% rename from site/profile/manifests/puppetserver/config.pp rename to site/profile/manifests/server/config.pp index c9e3bb4..c6ca9ac 100644 --- a/site/profile/manifests/puppetserver/config.pp +++ b/site/profile/manifests/server/config.pp @@ -3,8 +3,8 @@ # @param autosign List of certnames or domain name globs # # @example -# include profile::puppetserver::config -class profile::puppetserver::config ( +# include profile::server::config +class profile::server::config ( Array[String] $autosign, ) { file { '/etc/puppetlabs/puppet/autosign.conf': diff --git a/site/profile/manifests/server/install.pp b/site/profile/manifests/server/install.pp new file mode 100644 index 0000000..5fa5f20 --- /dev/null +++ b/site/profile/manifests/server/install.pp @@ -0,0 +1,15 @@ +# @summary Install server package +# +# @param package The name of the package to install +# @param package_ensure The ensure value for the package +# +# @example +# include profile::server::install +class profile::server::install ( + String[1] $package = 'openvox-server', + String[1] $package_ensure = 'installed', +) { + package { $package: + ensure => $package_ensure, + } +} diff --git a/site/profile/manifests/server/service.pp b/site/profile/manifests/server/service.pp new file mode 100644 index 0000000..db23352 --- /dev/null +++ b/site/profile/manifests/server/service.pp @@ -0,0 +1,18 @@ +# @summary Configure server service +# +# @param service_name The name of the service to manage +# @param service_ensure The ensure value for the service +# @param service_enable Whether to enable the service at boot +# +# @example +# include profile::server::service +class profile::server::service ( + String[1] $service_name = 'puppetserver', + String[1] $service_ensure = 'running', + Boolean $service_enable = true, +) { + service { $service_name: + ensure => $service_ensure, + enable => $service_enable, + } +} diff --git a/site/profile/spec/classes/puppetserver/config_spec.rb b/site/profile/spec/classes/server/config_spec.rb similarity index 83% rename from site/profile/spec/classes/puppetserver/config_spec.rb rename to site/profile/spec/classes/server/config_spec.rb index 8ee7ff4..6c5100d 100644 --- a/site/profile/spec/classes/puppetserver/config_spec.rb +++ b/site/profile/spec/classes/server/config_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe 'profile::puppetserver::config' do +describe 'profile::server::config' do on_supported_os.each do |os, os_facts| context "on #{os}" do let(:facts) { os_facts } @@ -15,7 +15,7 @@ it { is_expected.to compile } - it { is_expected.to contain_class('profile::puppetserver::config') } + it { is_expected.to contain_class('profile::server::config') } it { is_expected.to contain_file('/etc/puppetlabs/puppet/autosign.conf').with( diff --git a/site/profile/spec/classes/puppetserver/install_spec.rb b/site/profile/spec/classes/server/install_spec.rb similarity index 82% rename from site/profile/spec/classes/puppetserver/install_spec.rb rename to site/profile/spec/classes/server/install_spec.rb index fe4ee35..0e712e0 100644 --- a/site/profile/spec/classes/puppetserver/install_spec.rb +++ b/site/profile/spec/classes/server/install_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'profile::puppetserver::install' do +describe 'profile::server::install' do on_supported_os.each do |os, os_facts| context "on #{os}" do let(:facts) { os_facts } diff --git a/site/profile/spec/classes/puppetserver/service_spec.rb b/site/profile/spec/classes/server/service_spec.rb similarity index 82% rename from site/profile/spec/classes/puppetserver/service_spec.rb rename to site/profile/spec/classes/server/service_spec.rb index c1cd9fa..c705cf5 100644 --- a/site/profile/spec/classes/puppetserver/service_spec.rb +++ b/site/profile/spec/classes/server/service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'profile::puppetserver::service' do +describe 'profile::server::service' do on_supported_os.each do |os, os_facts| context "on #{os}" do let(:facts) { os_facts } diff --git a/site/profile/spec/classes/puppetserver_spec.rb b/site/profile/spec/classes/server_spec.rb similarity index 85% rename from site/profile/spec/classes/puppetserver_spec.rb rename to site/profile/spec/classes/server_spec.rb index 2fab5ed..47075e5 100644 --- a/site/profile/spec/classes/puppetserver_spec.rb +++ b/site/profile/spec/classes/server_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'profile::puppetserver' do +describe 'profile::server' do on_supported_os.each do |os, os_facts| context "on #{os}" do let(:facts) { os_facts } diff --git a/site/profile/templates/autosign.conf.epp b/site/profile/templates/autosign.conf.epp index de71f96..28c9b32 100644 --- a/site/profile/templates/autosign.conf.epp +++ b/site/profile/templates/autosign.conf.epp @@ -1,3 +1,3 @@ -<% $profile::puppetserver::config::autosign.each |String $s| { -%> +<% $profile::server::config::autosign.each |String $s| { -%> <%= $s %> <% } -%> diff --git a/site/role/REFERENCE.md b/site/role/REFERENCE.md index 3784530..f6ce670 100644 --- a/site/role/REFERENCE.md +++ b/site/role/REFERENCE.md @@ -7,11 +7,11 @@ ### Classes * [`role::agent`](#role--agent): Agent class -* [`role::puppetserver`](#role--puppetserver): Puppet server class +* [`role::server`](#role--server): Puppet server class ### Plans -* [`role`](#role): Build a Puppet server and attach agents +* [`role`](#role): Build an OpenVox server and attach agents ## Classes @@ -27,7 +27,7 @@ Agent class include role::agent ``` -### `role::puppetserver` +### `role::server` Puppet server class @@ -36,40 +36,67 @@ Puppet server class ##### ```puppet -include role::puppetserver +include role::server ``` ## Plans ### `role` -Build a Puppet server and attach agents +Build an OpenVox server and attach agents #### Parameters The following parameters are available in the `role` plan: -* [`puppet_release`](#-role--puppet_release) -* [`puppet_version`](#-role--puppet_version) +* [`openvox_release`](#-role--openvox_release) +* [`openvox_version`](#-role--openvox_version) +* [`openvox_collection`](#-role--openvox_collection) +* [`release_package`](#-role--release_package) +* [`openvox_agent`](#-role--openvox_agent) * [`targets`](#-role--targets) -* [`puppet_target`](#-role--puppet_target) +* [`server_target`](#-role--server_target) * [`control_repo`](#-role--control_repo) * [`choria_user`](#-role--choria_user) -##### `puppet_release` +##### `openvox_release` Data type: `Integer` -The major version of Puppet to use +The major version of OpenVox to use -##### `puppet_version` +##### `openvox_version` Data type: `Optional[String]` -The version of puppet-agent to install +The version of openvox-agent to install Default value: `undef` +##### `openvox_collection` + +Data type: `String[1]` + +The collection to use for openvox-agent + +Default value: `"openvox${openvox_release}"` + +##### `release_package` + +Data type: `String[1]` + +The URL of the openvox-release package + +Default value: `"https://yum.voxpupuli.org/${openvox_collection}-release-el-\$( rpm --eval '%{rhel}' ).noarch.rpm"` + +##### `openvox_agent` + +Data type: `String[1]` + +The name of the openvox-agent package + +Default value: `'openvox-agent'` + ##### `targets` Data type: `TargetSpec` @@ -78,7 +105,7 @@ The targets to run on Default value: `'all'` -##### `puppet_target` +##### `server_target` Data type: `TargetSpec` diff --git a/site/role/lib/facter/role__puppetserver__r10k_remote.rb b/site/role/lib/facter/role__server__r10k_remote.rb similarity index 88% rename from site/role/lib/facter/role__puppetserver__r10k_remote.rb rename to site/role/lib/facter/role__server__r10k_remote.rb index 94ec327..86b8a0a 100644 --- a/site/role/lib/facter/role__puppetserver__r10k_remote.rb +++ b/site/role/lib/facter/role__server__r10k_remote.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -Facter.add(:role__puppetserver__r10k_remote) do +Facter.add(:role__server__r10k_remote) do r10k_yaml = '/etc/puppetlabs/r10k/r10k.yaml' confine kernel: 'Linux' diff --git a/site/role/manifests/puppetserver.pp b/site/role/manifests/server.pp similarity index 63% rename from site/role/manifests/puppetserver.pp rename to site/role/manifests/server.pp index f768dd3..74b1c42 100644 --- a/site/role/manifests/puppetserver.pp +++ b/site/role/manifests/server.pp @@ -1,12 +1,12 @@ # @summary Puppet server class # # @example -# include role::puppetserver -class role::puppetserver { +# include role::server +class role::server { include 'git' include 'r10k' - include 'profile::puppetserver' + include 'profile::server' include 'profile::puppetdb' diff --git a/site/role/plans/init.pp b/site/role/plans/init.pp index 10526c4..4ab4ad6 100644 --- a/site/role/plans/init.pp +++ b/site/role/plans/init.pp @@ -1,37 +1,43 @@ -# @summary Build a Puppet server and attach agents +# @summary Build an OpenVox server and attach agents # -# @param puppet_release The major version of Puppet to use -# @param puppet_version The version of puppet-agent to install +# @param openvox_release The major version of OpenVox to use +# @param openvox_version The version of openvox-agent to install +# @param openvox_collection The collection to use for openvox-agent +# @param release_package The URL of the openvox-release package +# @param openvox_agent The name of the openvox-agent package # @param targets The targets to run on -# @param puppet_target The puppet server target +# @param server_target The puppet server target # @param control_repo URL of the control repo # @param choria_user User name of the demo choria user on the Puppet server plan role ( - Integer $puppet_release, - Optional[String] $puppet_version = undef, - TargetSpec $targets = 'all', - TargetSpec $puppet_target = 'puppet', + Integer $openvox_release, + Optional[String] $openvox_version = undef, + String[1] $openvox_collection = "openvox${openvox_release}", + String[1] $release_package = "https://yum.voxpupuli.org/${openvox_collection}-release-el-\$( rpm --eval '%{rhel}' ).noarch.rpm", + String[1] $openvox_agent = 'openvox-agent', + TargetSpec $targets = 'all', + TargetSpec $server_target = 'puppet', Variant[ Stdlib::HTTPUrl, Pattern[/\Afile:\/\/\/([^\n\/\0]+(\/)?)+\z/] - ] $control_repo = 'file:///vagrant/', - Optional[String] $choria_user = 'vagrant', + ] $control_repo = 'file:///vagrant/', + Optional[String] $choria_user = 'vagrant', ) { - # We want to specify the Puppet agent version to install, - # so we start by running the puppet_agent::install task. - $puppet_collection = "puppet${puppet_release}" - $agent_install_message = $puppet_version ? { - /^.+$/ => "Installing puppet-agent ${puppet_version}", - default => "Installing ${puppet_collection}", + # We want to specify the OpenVox agent version to install, + # so we start by manually installing the agent package. + run_command("dnf -y install ${release_package}", $targets, 'Installing openvox-release package') + + if $openvox_version =~ String[1] { + run_command("dnf -y install ${openvox_agent}-${openvox_version}", $targets, "Installing openvox-agent package version ${openvox_version}") + } else { + run_command("dnf -y install ${openvox_agent}", $targets, 'Installing openvox-agent package') } - $agent_version = $puppet_version ? { - /^.+$/ => { 'version' => $puppet_version }, - default => {}, + + get_targets($targets).each |$target| { + # Set the puppet-agent feature to true so that + # apply_prep() will not attempt to install the agent. + set_feature($target, 'puppet-agent', true) } - $agent_install_args = { - 'collection' => $puppet_collection, - } + $agent_version - run_task('puppet_agent::install', $targets, $agent_install_message, $agent_install_args) # apply_prep will see that puppet-agent is already # installed and collect facts. @@ -65,28 +71,28 @@ } } - # On the puppet server target, configure r10k. - apply($puppet_target, '_description' => 'Configure r10k') { + # On the server target, configure r10k. + apply($server_target, '_description' => 'Configure r10k') { class { 'git': } -> class { 'r10k': remote => $control_repo, } - -> exec { 'r10k deploy environment -pv': - path => '/opt/puppetlabs/bin:/bin:/usr/bin:/sbin:/usr/sbin', - creates => '/etc/puppetlabs/code/environments/production/Puppetfile', + ~> exec { 'r10k deploy environment -pv': + path => '/opt/puppetlabs/bin:/bin:/usr/bin:/sbin:/usr/sbin', + refreshonly => true, } } - # On the puppet server target, install and start the puppetserver. - apply($puppet_target, '_description' => 'Install and start server components') { - include profile::puppetserver + # On the server target, install and start the server service. + apply($server_target, '_description' => 'Install and start server components') { + include profile::server } - # Run the puppet agent to finish. + # Run the agent to finish. run_command( 'puppet agent -t -w 30 || { [ $? -eq 2 ] && true; };', - $puppet_target, - 'First Puppet agent run', + $server_target, + 'First agent run', '_env_vars' => { 'PATH' => '/opt/puppetlabs/bin:/bin:/usr/bin', }, @@ -95,7 +101,7 @@ if $choria_user { # Request a choria cert. apply( - $puppet_target, + $server_target, '_description' => 'Request a choria cert', '_run_as' => $choria_user, ) { @@ -110,11 +116,11 @@ } } - # Run the puppet agent on the remaining targets. + # Run the agent on the remaining targets. run_command( 'puppet agent -t -w 30 || { [ $? -eq 2 ] && true; };', - get_targets($targets) - get_targets($puppet_target), - 'First Puppet agent run', + get_targets($targets) - get_targets($server_target), + 'First agent run', '_env_vars' => { 'PATH' => '/opt/puppetlabs/bin:/bin:/usr/bin', }, diff --git a/site/role/spec/classes/puppetserver_spec.rb b/site/role/spec/classes/server_spec.rb similarity index 89% rename from site/role/spec/classes/puppetserver_spec.rb rename to site/role/spec/classes/server_spec.rb index 55b160f..5cdbb79 100644 --- a/site/role/spec/classes/puppetserver_spec.rb +++ b/site/role/spec/classes/server_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe 'role::puppetserver' do +describe 'role::server' do on_supported_os.each do |os, os_facts| context "on #{os}" do let(:facts) do @@ -13,7 +13,7 @@ it { is_expected.to compile } - it { is_expected.to contain_class('role::puppetserver') } + it { is_expected.to contain_class('role::server') } it { is_expected.to contain_class('r10k') } it { is_expected.to contain_class('puppetdb') } diff --git a/site/role/spec/unit/facter/role__puppetserver__r10k_remote_spec.rb b/site/role/spec/unit/facter/role__server__r10k_remote_spec.rb similarity index 90% rename from site/role/spec/unit/facter/role__puppetserver__r10k_remote_spec.rb rename to site/role/spec/unit/facter/role__server__r10k_remote_spec.rb index 3bb6758..18e5418 100644 --- a/site/role/spec/unit/facter/role__puppetserver__r10k_remote_spec.rb +++ b/site/role/spec/unit/facter/role__server__r10k_remote_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' require 'facter' -require 'facter/role__puppetserver__r10k_remote' +require 'facter/role__server__r10k_remote' RSpec.shared_examples 'r10k' do context 'with r10k.yaml' do @@ -27,8 +27,8 @@ end end -describe :role__puppetserver__r10k_remote, type: :fact do - subject(:fact) { Facter.fact(:role__puppetserver__r10k_remote) } +describe :role__server__r10k_remote, type: :fact do + subject(:fact) { Facter.fact(:role__server__r10k_remote) } let(:r10k_yaml) { '/etc/puppetlabs/r10k/r10k.yaml' } diff --git a/spec/puppet/sample_spec.rb b/spec/puppet/sample_spec.rb index a9693df..0b2b33f 100644 --- a/spec/puppet/sample_spec.rb +++ b/spec/puppet/sample_spec.rb @@ -2,10 +2,10 @@ require 'spec_helper' -puppet_version = ENV.fetch('PUPPET_VERSION', '') -puppet_release = puppet_version.empty? ? ENV.fetch('PUPPET_RELEASE', '8') : puppet_version.split('.').first +openvox_version = ENV.fetch('OPENVOX_VERSION', '') +openvox_release = openvox_version.empty? ? ENV.fetch('OPENVOX_RELEASE', '8') : openvox_version.split('.').first -describe 'puppetserver' do +describe 'server' do # Verify the physical setup of the server describe interface('eth0') do it { is_expected.to exist } @@ -71,7 +71,7 @@ end # Verify the puppet server configuration - describe package('puppetserver'), if: os[:family] == 'redhat' do + describe package('openvox-server'), if: os[:family] == 'redhat' do it { is_expected.to be_installed } end @@ -85,7 +85,7 @@ end # Verify puppet agent configuration - describe package('puppet-agent') do + describe package('openvox-agent') do it { is_expected.to be_installed } end @@ -95,7 +95,7 @@ end # Yum configuration - describe yumrepo("puppet#{puppet_release}") do + describe yumrepo("openvox#{openvox_release}") do it { is_expected.to exist } it { is_expected.to be_enabled } end From 4d6083ba9244da73baeaec7409bb279e3227e07f Mon Sep 17 00:00:00 2001 From: Steven Pritchard Date: Wed, 16 Apr 2025 16:11:53 -0500 Subject: [PATCH 2/5] Switch to openvoxdb --- data/common.yaml | 2 ++ site/profile/REFERENCE.md | 8 ++++---- site/profile/manifests/{puppetdb.pp => db.pp} | 6 +++--- .../profile/spec/classes/{puppetdb_spec.rb => db_spec.rb} | 2 +- site/role/manifests/server.pp | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) rename site/profile/manifests/{puppetdb.pp => db.pp} (83%) rename site/profile/spec/classes/{puppetdb_spec.rb => db_spec.rb} (86%) diff --git a/data/common.yaml b/data/common.yaml index beaf572..1131e14 100644 --- a/data/common.yaml +++ b/data/common.yaml @@ -18,6 +18,8 @@ profile::server::config::autosign: puppetdb::master::config::create_puppet_service_resource: false puppetdb::manage_firewall: false puppetdb::postgres_version: '17' +puppetdb::puppetdb_package: 'openvoxdb' +puppetdb::master::config::terminus_package: 'openvoxdb-termini' choria::manage_package_repo: true choria::broker::network_broker: true diff --git a/site/profile/REFERENCE.md b/site/profile/REFERENCE.md index d6256d9..2a443c9 100644 --- a/site/profile/REFERENCE.md +++ b/site/profile/REFERENCE.md @@ -8,7 +8,7 @@ * [`profile::agent`](#profile--agent): Configures the `puppet` service * [`profile::base`](#profile--base): Base OS customization -* [`profile::puppetdb`](#profile--puppetdb): Configure puppetdb +* [`profile::db`](#profile--db): Configure db * [`profile::server`](#profile--server): Configure server * [`profile::server::config`](#profile--server--config): Configures the puppet server * [`profile::server::install`](#profile--server--install): Install server package @@ -78,16 +78,16 @@ Data type: `Array` A list of packages to manage -### `profile::puppetdb` +### `profile::db` -Configure puppetdb +Configure db #### Examples ##### ```puppet -include profile::puppetdb +include profile::db ``` ### `profile::server` diff --git a/site/profile/manifests/puppetdb.pp b/site/profile/manifests/db.pp similarity index 83% rename from site/profile/manifests/puppetdb.pp rename to site/profile/manifests/db.pp index 0fb4997..a448bbe 100644 --- a/site/profile/manifests/puppetdb.pp +++ b/site/profile/manifests/db.pp @@ -1,8 +1,8 @@ -# @summary Configure puppetdb +# @summary Configure db # # @example -# include profile::puppetdb -class profile::puppetdb { +# include profile::db +class profile::db { include 'puppetdb' include 'puppetdb::master::config' diff --git a/site/profile/spec/classes/puppetdb_spec.rb b/site/profile/spec/classes/db_spec.rb similarity index 86% rename from site/profile/spec/classes/puppetdb_spec.rb rename to site/profile/spec/classes/db_spec.rb index f7d9ab4..d312de3 100644 --- a/site/profile/spec/classes/puppetdb_spec.rb +++ b/site/profile/spec/classes/db_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'profile::puppetdb' do +describe 'profile::db' do on_supported_os.each do |os, os_facts| context "on #{os}" do let(:facts) { os_facts } diff --git a/site/role/manifests/server.pp b/site/role/manifests/server.pp index 74b1c42..43bca96 100644 --- a/site/role/manifests/server.pp +++ b/site/role/manifests/server.pp @@ -8,7 +8,7 @@ include 'profile::server' - include 'profile::puppetdb' + include 'profile::db' include 'choria' include 'choria::broker' From 947033a9ba285f6774276cda29c203053a29421d Mon Sep 17 00:00:00 2001 From: Steven Pritchard Date: Thu, 17 Apr 2025 10:41:03 -0500 Subject: [PATCH 3/5] Always run r10k to ensure that the environment has current content --- site/role/plans/init.pp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site/role/plans/init.pp b/site/role/plans/init.pp index 4ab4ad6..f4e8c2f 100644 --- a/site/role/plans/init.pp +++ b/site/role/plans/init.pp @@ -77,9 +77,9 @@ -> class { 'r10k': remote => $control_repo, } - ~> exec { 'r10k deploy environment -pv': - path => '/opt/puppetlabs/bin:/bin:/usr/bin:/sbin:/usr/sbin', - refreshonly => true, + -> exec { 'r10k deploy environment -pv': + path => '/opt/puppetlabs/bin:/bin:/usr/bin:/sbin:/usr/sbin', + # Always run this command to ensure that the environment is deployed. } } From 2b204c6ef51c1ce4bbe82f1417d944ab20504521 Mon Sep 17 00:00:00 2001 From: Steven Pritchard Date: Thu, 17 Apr 2025 10:56:18 -0500 Subject: [PATCH 4/5] Fix a couple of references to the r10k remote fact --- data/common.yaml | 2 +- site/role/spec/classes/server_spec.rb | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/common.yaml b/data/common.yaml index 1131e14..b6d6827 100644 --- a/data/common.yaml +++ b/data/common.yaml @@ -9,7 +9,7 @@ mcollective::site_policies: facts: "*" classes: "*" -r10k::remote: "%{facts.role__puppetserver__r10k_remote}" +r10k::remote: "%{facts.role__server__r10k_remote}" profile::server::config::autosign: - "*.%{facts.networking.domain}" diff --git a/site/role/spec/classes/server_spec.rb b/site/role/spec/classes/server_spec.rb index 5cdbb79..9146810 100644 --- a/site/role/spec/classes/server_spec.rb +++ b/site/role/spec/classes/server_spec.rb @@ -5,9 +5,9 @@ context "on #{os}" do let(:facts) do os_facts.merge( - 'puppet_environmentpath' => '/etc/puppetlabs/code/environments', - 'puppet_vardir' => '/opt/puppetlabs/puppet/cache', - 'role__puppetserver__r10k_remote' => 'file:///example', + 'puppet_environmentpath' => '/etc/puppetlabs/code/environments', + 'puppet_vardir' => '/opt/puppetlabs/puppet/cache', + 'role__server__r10k_remote' => 'file:///example', ) end From 29b869507108bb205069ca4777d14722b7ee9ed5 Mon Sep 17 00:00:00 2001 From: Steven Pritchard Date: Thu, 17 Apr 2025 14:40:44 -0500 Subject: [PATCH 5/5] Fix tests --- spec/spec_helper.rb | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index e8aaf08..9342f33 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -3,6 +3,7 @@ require 'serverspec' require 'net/ssh' require 'tempfile' +require 'bundler' set :backend, :ssh @@ -20,12 +21,14 @@ host = ENV['TARGET_HOST'] begin - state = `vagrant status #{host} --machine-readable` - .lines(chomp: true) - .map { |line| line.split(',') } - .select { |v| v[2] == 'state' } - .each_with_object({}) { |v, memo| memo[v[1]] = [v[2..-1]].to_h } - if host.nil? || state.any { |_k, v| v['state'] != 'running' } || (state[host]['state'] != 'running') + state = Bundler.with_original_env do + `vagrant status #{host} --machine-readable` + &.lines(chomp: true) + &.map { |line| line.split(',') } + &.select { |v| v[2] == 'state' } + &.each_with_object({}) { |v, memo| memo[v[1]] = [v[2..-1]].to_h } + end + if host.nil? || state&.any? { |_k, v| v['state'] != 'running' } || (state&.dig(host, 'state') != 'running') system("vagrant up #{host}") end rescue => e @@ -33,7 +36,9 @@ end config = Tempfile.new('', Dir.tmpdir) -config.write(`vagrant ssh-config #{host}`) +Bundler.with_original_env do + config.write(`vagrant ssh-config #{host}`) +end config.close options = Net::SSH::Config.for(host, [config.path])