+1

On Sun, Nov 21, 2010 at 12:02 PM, Stefan Schulte
<[email protected]> wrote:
> As mentioned in the ticket it is not obvious that aliases do not belong
> in the resourcename but have to be specified with the property
> "host_aliases". On the puppet-user list I saw someone using this as a
> resource
>
>  @@sshkey {"$fqdn,$hostname,$ipaddress":
>    type => rsa,
>    key  => $sshrsakey,
>  }
>
> Puppet will now write a correct entry to the know_hosts file, but when
> it rereads the file, the field $fqdn,$hostname,$ipaddress is split into
> name ($fqdn) and host_aliases ([$hostname,$ipaddress]). Since we dont
> find the resource the user specified, puppet will put the same key in
> the file over and over again. This patch adds a simple validation on
> resourcename.
>
> Signed-off-by: Stefan Schulte <[email protected]>
> ---
>  lib/puppet/type/sshkey.rb     |    7 +++-
>  spec/unit/type/sshkey_spec.rb |   71 
> +++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 77 insertions(+), 1 deletions(-)
>  create mode 100644 spec/unit/type/sshkey_spec.rb
>
> diff --git a/lib/puppet/type/sshkey.rb b/lib/puppet/type/sshkey.rb
> index b7a1b8a..59a1a12 100755
> --- a/lib/puppet/type/sshkey.rb
> +++ b/lib/puppet/type/sshkey.rb
> @@ -41,7 +41,7 @@ module Puppet
>           raise Puppet::Error, "Aliases cannot include whitespace"
>         end
>         if value =~ /,/
> -          raise Puppet::Error, "Aliases cannot include whitespace"
> +          raise Puppet::Error, "Aliases must be provided as an array, not a 
> comma-separated list"
>         end
>       end
>     end
> @@ -50,6 +50,11 @@ module Puppet
>       desc "The host name that the key is associated with."
>
>       isnamevar
> +
> +      validate do |value|
> +        raise Puppet::Error, "Resourcename cannot include whitespaces" if 
> value =~ /\s/
> +        raise Puppet::Error, "No comma in resourcename allowed. If you want 
> to specify aliases use the host_aliases property" if value.include?(',')
> +      end
>     end
>
>     newproperty(:target) do
> diff --git a/spec/unit/type/sshkey_spec.rb b/spec/unit/type/sshkey_spec.rb
> new file mode 100644
> index 0000000..966ca70
> --- /dev/null
> +++ b/spec/unit/type/sshkey_spec.rb
> @@ -0,0 +1,71 @@
> +#!/usr/bin/env ruby
> +
> +require File.dirname(__FILE__) + '/../../spec_helper'
> +
> +sshkey = Puppet::Type.type(:sshkey)
> +
> +describe sshkey do
> +  before do
> +   �...@class = sshkey
> +  end
> +
> +  it "should have :name its namevar" do
> +   �[email protected]_attributes.should == [:name]
> +  end
> +
> +  describe "when validating attributes" do
> +    [:name, :provider].each do |param|
> +      it "should have a #{param} parameter" do
> +       �[email protected](param).should == :param
> +      end
> +    end
> +
> +    [:host_aliases, :ensure, :key, :type].each do |property|
> +      it "should have a #{property} property" do
> +       �[email protected](property).should == :property
> +      end
> +    end
> +  end
> +
> +  describe "when validating values" do
> +
> +    it "should support ssh-dss as a type value" do
> +      proc { @class.new(:name => "foo", :type => "ssh-dss") }.should_not 
> raise_error
> +    end
> +
> +    it "should support ssh-rsa as a type value" do
> +      proc { @class.new(:name => "whev", :type => "ssh-rsa") }.should_not 
> raise_error
> +    end
> +
> +    it "should alias :dsa to ssh-dss as a value for type" do
> +      key = @class.new(:name => "whev", :type => :dsa)
> +      key.should(:type).should == :'ssh-dss'
> +    end
> +
> +    it "should alias :rsa to ssh-rsa as a value for type" do
> +      key = @class.new(:name => "whev", :type => :rsa)
> +      key.should(:type).should == :'ssh-rsa'
> +    end
> +
> +    it "should not support values other than ssh-dss, ssh-rsa, dsa, rsa for 
> type" do
> +      proc { @class.new(:name => "whev", :type => :'ssh-dsa') }.should 
> raise_error(Puppet::Error)
> +    end
> +
> +    it "should accept one host_alias" do
> +      proc { @class.new(:name => "foo", :host_aliases => 'foo.bar.tld') 
> }.should_not raise_error
> +    end
> +
> +    it "should accept multiple host_aliases as an array" do
> +      proc { @class.new(:name => "foo", :host_aliases => 
> ['foo.bar.tld','10.0.9.9']) }.should_not raise_error
> +    end
> +
> +    it "should not accept spaces in any host_alias" do
> +      proc { @class.new(:name => "foo", :host_aliases => ['foo.bar.tld','foo 
> bar']) }.should raise_error(Puppet::Error)
> +    end
> +
> +    it "should not accept aliases in the resourcename" do
> +      proc { @class.new(:name => 'host,host.domain,ip') }.should 
> raise_error(Puppet::Error)
> +    end
> +
> +  end
> +end
> --
> 1.7.3.2
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Puppet Developers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/puppet-dev?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to