From 96e2ab1ed8d00efec4923ecde725c19d67c0cc24 Mon Sep 17 00:00:00 2001 From: Thomas Equeter Date: Mon, 15 Apr 2019 00:55:15 +0200 Subject: [PATCH] Wait for CUPS to listen on port 631. Fixes #35 --- .fixtures.yml | 7 ++++ manifests/server/services.pp | 16 +++++++++ metadata.json | 7 ++-- spec/acceptance/classes/server_spec.rb | 36 +++++++++++++++++++ spec/spec_helper.rb | 4 ++- spec/spec_helper_acceptance.rb | 1 + ...it_until_cups_listens_on_port_631.conf.erb | 2 ++ 7 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 spec/acceptance/classes/server_spec.rb create mode 100644 templates/systemd/wait_until_cups_listens_on_port_631.conf.erb diff --git a/.fixtures.yml b/.fixtures.yml index 9b1391d2..99da892f 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -1,5 +1,12 @@ --- fixtures: + repositories: + stdlib: # dependency of camptocamp-systemd + repo: "https://github.com/puppetlabs/puppetlabs-stdlib" + ref: "4.13.1" + systemd: + repo: "https://github.com/camptocamp/puppet-systemd" + ref: "1.0.0" symlinks: cups: "#{source_dir}" diff --git a/manifests/server/services.pp b/manifests/server/services.pp index 71e71972..270f32a9 100644 --- a/manifests/server/services.pp +++ b/manifests/server/services.pp @@ -17,10 +17,26 @@ class cups::server::services inherits cups::server { if ($::cups::service_manage) { + service { $::cups::service_names : ensure => $::cups::service_ensure, enable => $::cups::service_enable, } + + if ($::systemd) { + + systemd::dropin_file { 'wait_until_cups_listens_on_port_631.conf': + unit => 'cups.socket', + content => template( + 'cups/_header.erb', + 'cups/systemd/wait_until_cups_listens_on_port_631.conf.erb' + ) + } + + Systemd::Dropin_file['wait_until_cups_listens_on_port_631.conf'] ~> Service[$::cups::service_names] + + } + } } diff --git a/metadata.json b/metadata.json index 9d33cc71..dbedfed2 100644 --- a/metadata.json +++ b/metadata.json @@ -13,7 +13,10 @@ "printing" ], "dependencies": [ - + { + "name": "camptocamp-systemd", + "version_requirement": ">= 1.0.0 < 3.0.0" + } ], "operatingsystem_support": [ { @@ -92,7 +95,7 @@ "requirements": [ { "name": "puppet", - "version_requirement": ">= 4.0.0 < 7.0.0" + "version_requirement": ">= 4.10.0 < 7.0.0" } ], "data_provider": null, diff --git a/spec/acceptance/classes/server_spec.rb b/spec/acceptance/classes/server_spec.rb new file mode 100644 index 00000000..3dae5175 --- /dev/null +++ b/spec/acceptance/classes/server_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'spec_helper_acceptance' + +RSpec.describe 'Including class "cups"' do + before(:all) do + ensure_cups_is_running + purge_all_queues + end + + let(:manifest) { "include '::cups'" } + + describe 'restarting the CUPS server' do + before(:all) do + # Trigger a restart of the Class[cups::server::service] through Class[cups::server::config] + shell('touch /etc/cups/lpoptions') + end + + context 'when there are a lot of queues present' do + before(:all) do + names = (1..100).map { |n| "Queue#{n.to_s.rjust(3, '0')}" } + + # Increase RAM on virtual machine if this command runs suspiciously slow + add_printers(*names) + end + + it 'applies without error' do + apply_manifest(manifest) + end + + it 'is idempotent' do + apply_manifest(manifest, catch_changes: true) + end + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 333a3af3..a54c11c6 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -43,7 +43,9 @@ def any_supported_os(morefacts = {}) { operatingsystem: 'CentOS', osfamily: 'Suse', - os: { 'family' => 'Suse', 'name' => 'CentOS' } + os: { 'family' => 'Suse', 'name' => 'CentOS' }, + path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', + systemd: true }.merge(morefacts) end diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index 12ab6ec8..207f68cd 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -14,6 +14,7 @@ hosts.each do |host| shell("sed -i 's/^nameserver.*/nameserver 8.8.8.8/' /etc/resolv.conf") install_puppet_agent_on(host, puppet_collection: 'puppet6') + install_puppet_module_via_pmt_on(host, module_name: 'camptocamp-systemd', version: '1.0.0') copy_module_to(host, module_name: 'cups', source: project_root, target_module_path: '/etc/puppetlabs/code/modules') scp_to(host, File.join(project_root, 'spec/fixtures/ppd/textonly.ppd'), '/tmp/') end diff --git a/templates/systemd/wait_until_cups_listens_on_port_631.conf.erb b/templates/systemd/wait_until_cups_listens_on_port_631.conf.erb new file mode 100644 index 00000000..82acdd7b --- /dev/null +++ b/templates/systemd/wait_until_cups_listens_on_port_631.conf.erb @@ -0,0 +1,2 @@ +[Socket] +ListenStream=[::1]:631