Please review pull request #90: Add parameters support for nodes and node groups opened by (ccaum)

Description:

Previous to this commit there was no rake API for setting parameters on
nodes and node groups. This commit adds the node:parameters and
nodegroup:parameters tasks. Both accept two arguments:
- name Which node or node group to apply the parameters to
- parameters In format param1=val,param2=val2

This format was chosen for two reasons. I wanted multiple parameters to
be
able to supported on a single command. Further, rake doesn't support
multiple instances of the same argument so a format such as
'parameter=param,value parameter=param2,value2' could not be supported.

Further, this format is in use by Cloud Provisioner to specify custom facts for an instance.

Example:
rake node:parameters name=master.puppet.internal \
parameters=ntpserver=ntp1.mydomain.com,dnsserver=dns.mydomain.com

Potential Issues:
Currently it is impossible to escape the = or , characters when
specifying the parameters value. So node or node group parameters that
include a comma or equal sign will not be able to be specified.

  • Opened: Mon Feb 27 20:21:04 UTC 2012
  • Based on: puppetlabs:master (5abb5548de19be6bffdfe96848e1233ccf541df0)
  • Requested merge: ccaum:feature/master/12667_support_parameters_in_rake_api (69a03f9a5f738efbc566623c1be166a4682c5c14)

Diff follows:

diff --git a/lib/tasks/classesgroups.rake b/lib/tasks/classesgroups.rake
index b15eb94..2feda9e 100644
--- a/lib/tasks/classesgroups.rake
+++ b/lib/tasks/classesgroups.rake
@@ -161,6 +161,52 @@ namespace :nodegroup do
     end
   end
 
+  desc 'Edit/Add parameters for a node group'
+  task :parameters => :environment do
+    begin
+      group = NodeGroup.find_by_name(ENV['name'])
+
+      if group.nil?
+        puts 'Group doesn\'t exist!'
+        exit 1
+      end
+    rescue NameError => e
+      puts 'Must specify group name (name=<hostname>).'
+      exit 1
+    rescue => e
+      puts "There was a problem finding the group: #{e.message}"
+      exit 1
+    end
+
+    if ENV['parameters'].nil?
+      puts "Must specify group parameters (parameters=param1=val1,param2=val2)"
+      exit 1
+    end
+
+    parameters = Hash[ ENV['parameters'].split(',').map do |param|
+      param_array = param.split('=',2)
+      if param_array.size != 2
+        raise ArgumentError, 'Could not parse parameters given. Please check your format'
+      end
+      if [nil,''].include? param_array[0] or [nil,''].include? param_array[1]
+        raise ArgumentError, 'Could not parse parameters given. Please check your format'
+      end
+      param_array
+    end ].merge group.parameters
+
+    group.parameters = parameters.map do |name, parameter|
+      Parameter.new :key => name, :value => parameter
+    end
+
+    begin
+      group.save!
+      puts "Group parameters successfully edited for #{group.name}!"
+    rescue => e
+      puts "There was a problem saving the group: #{e.message}"
+      exit 1
+    end
+  end
+
   desc 'Edit a node group'
   task :edit => :environment do
     if ENV['name']
diff --git a/lib/tasks/node.rake b/lib/tasks/node.rake
index d44bf29..85aa8f5 100644
--- a/lib/tasks/node.rake
+++ b/lib/tasks/node.rake
@@ -114,6 +114,52 @@ namespace :node do
     end
   end
 
+  desc 'Edit/Add parameters for a node'
+  task :parameters => :environment do
+    begin
+      node = Node.find_by_name(ENV['name'])
+
+      if node.nil?
+        puts 'Node doesn\'t exist!'
+        exit 1
+      end
+    rescue NameError
+      puts 'Must specify node name (name=<hostname>).'
+      exit 1
+    rescue => e
+      puts "There was a problem finding the node: #{e.message}"
+      exit 1
+    end
+
+    if ENV['parameters'].nil?
+      puts "Must specify node parameters (parameters=param1=val1,param2=val2)"
+      exit 1
+    end
+
+    parameters = Hash[ ENV['parameters'].split(',').map do |param|
+      param_array = param.split('=',2)
+      if param_array.size != 2
+        raise ArgumentError, 'Could not parse parameters given. Please check your format'
+      end
+      if [nil,''].include? param_array[0] or [nil,''].include? param_array[1]
+        raise ArgumentError, 'Could not parse parameters given. Please check your format'
+      end
+      param_array
+    end ].merge node.parameters
+
+    node.parameters = parameters.map do |name, parameter|
+      Parameter.new :key => name, :value => parameter
+    end
+
+    begin
+      node.save!
+      puts "Node parameters successfully edited for #{node.name}!"
+    rescue => e
+      puts "There was a problem saving the node: #{e.message}"
+      exit 1
+    end
+  end
+
   desc 'Edit/Add groups for a node'
   task :groups => :environment do
     begin

    

--
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