diff options
| author | Luke Kanies <luke@puppetlabs.com> | 2011-04-12 21:41:06 -0700 |
|---|---|---|
| committer | Luke Kanies <luke@puppetlabs.com> | 2011-07-15 11:16:06 -0700 |
| commit | f4acb025f3a125d4c3c359fb6896ac20b36e06ab (patch) | |
| tree | 8523e88922841e997d0006906232e13fa6e043a1 | |
| parent | 1cbe2ad70eddbf00ef2d3127a9ffcc9f220ee277 (diff) | |
| download | puppet-f4acb025f3a125d4c3c359fb6896ac20b36e06ab.tar.gz puppet-f4acb025f3a125d4c3c359fb6896ac20b36e06ab.tar.xz puppet-f4acb025f3a125d4c3c359fb6896ac20b36e06ab.zip | |
Adding json support to Puppet::Node
Reviewed-by: Daniel Pittman <daniel@puppetlabs.com>
Reviewed-by: Nick Lewis <nick@puppetlabs.com>
Signed-off-by: Luke Kanies <luke@puppetlabs.com>
| -rw-r--r-- | lib/puppet/node.rb | 23 | ||||
| -rwxr-xr-x | spec/unit/node_spec.rb | 63 |
2 files changed, 86 insertions, 0 deletions
diff --git a/lib/puppet/node.rb b/lib/puppet/node.rb index 5b0a98615..4bd4d1de6 100644 --- a/lib/puppet/node.rb +++ b/lib/puppet/node.rb @@ -20,6 +20,29 @@ class Puppet::Node attr_accessor :name, :classes, :source, :ipaddress, :parameters attr_reader :time + def self.from_pson(pson) + raise ArgumentError, "No name provided in pson data" unless name = pson['name'] + + node = new(name) + node.classes = pson['classes'] + node.parameters = pson['parameters'] + node.environment = pson['environment'] + node + end + + def to_pson(*args) + result = { + 'document_type' => "Puppet::Node", + 'data' => {} + } + result['data']['name'] = name + result['data']['classes'] = classes unless classes.empty? + result['data']['parameters'] = parameters unless parameters.empty? + result['data']['environment'] = environment.name + + result.to_pson(*args) + end + def environment return super if @environment diff --git a/spec/unit/node_spec.rb b/spec/unit/node_spec.rb index c15093d90..ae71046f0 100755 --- a/spec/unit/node_spec.rb +++ b/spec/unit/node_spec.rb @@ -36,6 +36,69 @@ describe Puppet::Node do node.environment.name.should == :bar end end + + describe "when converting to json" do + before do + @node = Puppet::Node.new("mynode") + end + + it "should provide its name" do + PSON.parse(@node.to_pson)['data']['name'].should == "mynode" + end + + it "should include the classes if set" do + @node.classes = %w{a b c} + PSON.parse(@node.to_pson)['data']['classes'].should == %w{a b c} + end + + it "should not include the classes if there are none" do + PSON.parse(@node.to_pson)['data'].should_not be_include('classes') + end + + it "should include parameters if set" do + @node.parameters = {"a" => "b", "c" => "d"} + PSON.parse(@node.to_pson)['data']['parameters'].should == {"a" => "b", "c" => "d"} + end + + it "should not include the parameters if there are none" do + PSON.parse(@node.to_pson)['data'].should_not be_include('parameters') + end + + it "should include the environment" do + @node.environment = "production" + PSON.parse(@node.to_pson)['data']['environment'].should == "production" + end + end + + describe "when converting from json" do + before do + @node = Puppet::Node.new("mynode") + @format = Puppet::Network::FormatHandler.format('pson') + end + + def from_json(json) + @format.intern(Puppet::Node, json) + end + + it "should set its name" do + from_json(@node.to_pson).name.should == "mynode" + end + + it "should include the classes if set" do + @node.classes = %w{a b c} + from_json(@node.to_pson).classes.should == %w{a b c} + end + + it "should include parameters if set" do + @node.parameters = {"a" => "b", "c" => "d"} + from_json(@node.to_pson).parameters.should == {"a" => "b", "c" => "d"} + end + + it "should include the environment" do + @node.environment = "production" + from_json(@node.to_pson).environment.name.should == :production + end + end end describe Puppet::Node, "when initializing" do |
