aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Nagy <gabriel.nagy@puppet.com>2020-05-27 17:01:20 +0300
committerGabriel Nagy <gabriel.nagy@puppet.com>2020-05-27 17:41:49 +0300
commit2e059d49fbd48d0c4897518941f6a2b65785852a (patch)
tree1cc75fa35c2595f39e54514f75812dd6c2b634ca
parent9b2d2aab210360b785370cd982f50ba5ffd2b53f (diff)
downloadpuppet-sshkeys_core-2e059d49fbd48d0c4897518941f6a2b65785852a.tar.gz
puppet-sshkeys_core-2e059d49fbd48d0c4897518941f6a2b65785852a.tar.bz2
(PUP-10510) Fix sshkeys not being correctly purged
After adding support for composite namevars in version 2.0.0, the module lost the ability to purge sshkeys. This happens due to Puppet being unable to correctly match the names and types of the sshkeys to be purged. Part of the fix was done in https://github.com/puppetlabs/puppet/pull/8174, which changes how a resource is initialized if the provider implements a `title` method. Additionally, we add the key name and type to be included in the output shown by `puppet resource`.
-rw-r--r--lib/puppet/provider/sshkey/parsed.rb4
-rw-r--r--lib/puppet/type/sshkey.rb4
-rw-r--r--spec/acceptance/tests/resource/sshkey/purge_spec.rb73
3 files changed, 81 insertions, 0 deletions
diff --git a/lib/puppet/provider/sshkey/parsed.rb b/lib/puppet/provider/sshkey/parsed.rb
index 965c20d..3ed0873 100644
--- a/lib/puppet/provider/sshkey/parsed.rb
+++ b/lib/puppet/provider/sshkey/parsed.rb
@@ -28,6 +28,10 @@ Puppet::Type.type(:sshkey).provide(
0o644
end
+ def title
+ "#{property_hash[:name]}@#{property_hash[:type]}"
+ end
+
def self.default_target
case Facter.value(:operatingsystem)
when 'Darwin'
diff --git a/lib/puppet/type/sshkey.rb b/lib/puppet/type/sshkey.rb
index c3cce5d..6c7e428 100644
--- a/lib/puppet/type/sshkey.rb
+++ b/lib/puppet/type/sshkey.rb
@@ -12,6 +12,10 @@ module Puppet
"#{self[:name]}@#{self[:type]}"
end
+ def self.parameters_to_include
+ [:name, :type]
+ end
+
def self.title_patterns
[
[
diff --git a/spec/acceptance/tests/resource/sshkey/purge_spec.rb b/spec/acceptance/tests/resource/sshkey/purge_spec.rb
new file mode 100644
index 0000000..23ce37b
--- /dev/null
+++ b/spec/acceptance/tests/resource/sshkey/purge_spec.rb
@@ -0,0 +1,73 @@
+require 'spec_helper_acceptance'
+
+RSpec.context 'sshkeys: Purge' do
+ let(:keyname) { "pl#{rand(999_999).to_i}" }
+
+ # FIXME: This is bletcherous
+ let(:ssh_known_hosts) { '/etc/ssh/ssh_known_hosts' }
+
+ let(:purge_manifest) do
+ <<-MANIFEST
+ resources { 'sshkey':
+ purge => true,
+ }
+ MANIFEST
+ end
+
+ before(:each) do
+ posix_agents.agents.each do |agent|
+ # The 'cp' might fail because the source file doesn't exist
+ on(
+ agent,
+ "cp -fv #{ssh_known_hosts} /tmp/ssh_known_hosts",
+ acceptable_exit_codes: [0, 1],
+ )
+ cmd = <<-CMD
+echo '' > #{ssh_known_hosts}
+echo '#{keyname} ssh-rsa how_about_the_initial_rsa_key_of_c' >> #{ssh_known_hosts}
+echo '#{keyname} ssh-dss how_about_the_initial_dss_key_of_c' >> #{ssh_known_hosts}
+CMD
+ on(agent, cmd)
+ end
+ end
+
+ after(:each) do
+ posix_agents.each do |agent|
+ # Is it present?
+ rc = on(
+ agent,
+ '[ -e /tmp/ssh_known_hosts ]',
+ accept_all_exit_codes: true,
+ )
+ if rc.exit_code == 0
+ # It's present, so restore the original
+ on(
+ agent,
+ "mv -fv /tmp/ssh_known_hosts #{ssh_known_hosts}",
+ accept_all_exit_codes: true,
+ )
+ else
+ # It's missing, which means there wasn't one to backup; just
+ # delete the one we laid down
+ on(
+ agent,
+ "rm -fv #{ssh_known_hosts}",
+ accept_all_exit_codes: true,
+ )
+ end
+ end
+ end
+
+ posix_agents.each do |agent|
+ it "#{agent} should be able to purge all SSH known host keys" do
+ apply_manifest_on(agent, purge_manifest, catch_failures: true)
+
+ # expect purging to be idempotent
+ apply_manifest_on(agent, purge_manifest, catch_changes: true)
+
+ on(agent, "cat #{ssh_known_hosts}") do |_res|
+ expect(stdout).not_to include('how_about_the_initial')
+ end
+ end
+ end
+end