summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Turnbull <james@lovedthanlost.net>2010-04-24 03:32:48 +1000
committertest branch <puppet-dev@googlegroups.com>2010-02-17 06:50:53 -0800
commit5988f76aac63c4cb33c3e138c830eaf8aa4abfff (patch)
tree6a3d6a1a84379cf0109b9f124dd51fe7fd156db7
parent2c153b12921d67354ea0968ad81590a124ac8b75 (diff)
downloadpuppet-5988f76aac63c4cb33c3e138c830eaf8aa4abfff.tar.gz
puppet-5988f76aac63c4cb33c3e138c830eaf8aa4abfff.tar.xz
puppet-5988f76aac63c4cb33c3e138c830eaf8aa4abfff.zip
Fixes #3663 - It should be possible to list signed hosts only
Adds a --signed option to the --list feature that only displays signed certificates
-rw-r--r--lib/puppet/application/cert.rb8
-rw-r--r--lib/puppet/ssl/certificate_authority/interface.rb4
-rw-r--r--spec/unit/application/cert.rb5
-rwxr-xr-xspec/unit/ssl/certificate_authority/interface.rb10
4 files changed, 25 insertions, 2 deletions
diff --git a/lib/puppet/application/cert.rb b/lib/puppet/application/cert.rb
index a4ee5fef3..80ccc46f9 100644
--- a/lib/puppet/application/cert.rb
+++ b/lib/puppet/application/cert.rb
@@ -6,7 +6,7 @@ class Puppet::Application::Cert < Puppet::Application
should_parse_config
- attr_accessor :mode, :all, :ca, :digest
+ attr_accessor :mode, :all, :ca, :digest, :signed
def find_mode(opt)
modes = Puppet::SSL::CertificateAuthority::Interface::INTERFACE_METHODS
@@ -26,6 +26,10 @@ class Puppet::Application::Cert < Puppet::Application
@digest = arg
end
+ option("--signed", "-s") do
+ @signed = true
+ end
+
option("--debug", "-d") do |arg|
Puppet::Util::Log.level = :debug
end
@@ -43,6 +47,8 @@ class Puppet::Application::Cert < Puppet::Application
def main
if @all
hosts = :all
+ elsif @signed
+ hosts = :signed
else
hosts = command_line.args.collect { |h| puts h; h.downcase }
end
diff --git a/lib/puppet/ssl/certificate_authority/interface.rb b/lib/puppet/ssl/certificate_authority/interface.rb
index d2dc7b9b5..b60834a2c 100644
--- a/lib/puppet/ssl/certificate_authority/interface.rb
+++ b/lib/puppet/ssl/certificate_authority/interface.rb
@@ -56,6 +56,8 @@ class Puppet::SSL::CertificateAuthority::Interface
if subjects == :all
hosts = [signed, requests].flatten
+ elsif subjects == :signed
+ hosts = signed.flatten
else
hosts = subjects
end
@@ -116,7 +118,7 @@ class Puppet::SSL::CertificateAuthority::Interface
# Set the list of hosts we're operating on. Also supports keywords.
def subjects=(value)
- unless value == :all or value.is_a?(Array)
+ unless value == :all or value == :signed or value.is_a?(Array)
raise ArgumentError, "Subjects must be an array or :all; not %s" % value
end
diff --git a/spec/unit/application/cert.rb b/spec/unit/application/cert.rb
index 5970355e8..66c6aeac8 100644
--- a/spec/unit/application/cert.rb
+++ b/spec/unit/application/cert.rb
@@ -55,6 +55,11 @@ describe Puppet::Application::Cert do
@cert_app.all.should be_true
end
+ it "should set signed to true for --signed" do
+ @puppetca.handle_signed(0)
+ @puppetca.signed.should be_true
+ end
+
Puppet::SSL::CertificateAuthority::Interface::INTERFACE_METHODS.reject { |m| m == :destroy }.each do |method|
it "should set mode to #{method} with option --#{method}" do
@cert_app.send("handle_#{method}".to_sym, nil)
diff --git a/spec/unit/ssl/certificate_authority/interface.rb b/spec/unit/ssl/certificate_authority/interface.rb
index bcba298b2..d38e31b1b 100755
--- a/spec/unit/ssl/certificate_authority/interface.rb
+++ b/spec/unit/ssl/certificate_authority/interface.rb
@@ -215,6 +215,16 @@ describe Puppet::SSL::CertificateAuthority::Interface do
end
end
+ describe "and :signed was provided" do
+ it "should print a string containing all signed certificate requests and certificates" do
+ @ca.expects(:list).returns %w{host1 host2}
+
+ @applier = @class.new(:list, :signed)
+
+ @applier.apply(@ca)
+ end
+ end
+
describe "and an array of names was provided" do
it "should print a string of all named hosts that have a waiting request" do
@ca.expects(:waiting?).returns %w{host1 host2}