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 andnodegroup: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.
