mirror of
				https://github.com/optim-enterprises-bv/puppetlabs-create_resources.git
				synced 2025-10-30 17:58:31 +00:00 
			
		
		
		
	first commit of create_resources module.
it was called accepts. I added the ability to specify classes or definitions.
This commit is contained in:
		
							
								
								
									
										29
									
								
								README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								README
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| - License - GPL2 | ||||
| - Copyright - Puppetlabs 2011 | ||||
|  | ||||
| This module contains a custom function for puppet that can be used to dynamically add resources to the catalog. | ||||
|  | ||||
| I wrote this to use with an external node classifier that consumes YAML. | ||||
|  | ||||
| The yaml specifies classes and passes hashes to those classes as parameters | ||||
|  | ||||
| classes: | ||||
|   webserver::instances: | ||||
|     instances: | ||||
|       instance1: | ||||
|         foo: bar | ||||
|       instance2: | ||||
|         foo: blah | ||||
|  | ||||
| Then puppet code can consume the hash parameters and convert then into resources | ||||
|  | ||||
| class webserver::instances ( | ||||
|   $instances = {} | ||||
| ) { | ||||
|   create_resources('webserver::instance', $instances) | ||||
| } | ||||
|  | ||||
| Now I can dynamically determine how webserver instances are deployed to nodes | ||||
| by updating the YAML files. | ||||
|  | ||||
|  | ||||
							
								
								
									
										32
									
								
								lib/puppet/parser/functions/create_resources.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								lib/puppet/parser/functions/create_resources.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| Puppet::Parser::Functions::newfunction(:create_resources, :doc => ' | ||||
| Converts a hash into resources and adds them to the catalog. | ||||
| Takes two parameters: | ||||
|   create_resource($type, $resources) | ||||
|     Creates resources of type $type from the $resources hash. Assumes that | ||||
|     hash is in the following form: | ||||
|      {title=>{attr=>value}} | ||||
| ') do |args| | ||||
|   raise ArgumentError, 'requires resource type and param hash' if args.size < 2 | ||||
|   args[1].each do |title, params| | ||||
|     # TODO - add argument to specify constraints on parameters | ||||
|     raise ArgumentError, 'params should not contain title' if(params['title']) | ||||
|     if type = Puppet::Type.type(args[0].to_sym) | ||||
|       resource = type.hash2resource(params.merge(:title => title)) | ||||
|       catalog.add_resource(resource) | ||||
|     elsif args[0].downcase == 'class'# || args[0].downcase == 'node' | ||||
|       klass = find_hostclass(title) | ||||
|       klass.ensure_in_catalog(self, params) | ||||
|       compiler.catalog.add_class([title]) | ||||
|     else | ||||
|       # TODO - use ensure_in_catalog when it supports definitions  | ||||
|       # we assume that if nothing else mathces is must be a defined resource type | ||||
|       resource = find_definition(args[0]) | ||||
|       p_resource = Puppet::Parser::Resource.new(args[0], title, :scope => self, :source => resource) | ||||
|       params.merge(:name => title).each do |k,v| | ||||
|         p_resource.set_parameter(k,v) | ||||
|       end | ||||
|       resource.instantiate_resource(self, p_resource) | ||||
|       compiler.add_resource(self, p_resource) | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										7
									
								
								manifests/init.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								manifests/init.pp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| class create_resources( | ||||
|  $ensure, | ||||
|  $user_name=$name | ||||
| ){ | ||||
|  user{$name: ensure => $ensure} | ||||
|  notify{$user_name:} | ||||
| } | ||||
							
								
								
									
										7
									
								
								manifests/user.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								manifests/user.pp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| define create_resources::user( | ||||
|  $ensure, | ||||
|  $user_name=$operatingsystem | ||||
| ){ | ||||
|   user{$name: ensure => $ensure} | ||||
|   notify{$user_name:} | ||||
| } | ||||
							
								
								
									
										32
									
								
								tests/users.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								tests/users.pp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| $users3 = { | ||||
|  'dannyboy454' => { | ||||
|    'user_name'=>'dlfjdslkf', | ||||
|    'ensure'=>present, | ||||
|    'require' => 'User[foobar]', | ||||
|    'before' => 'User[sally-mae]' | ||||
|   }, | ||||
|  'bobby-joe' => {'ensure'=>present} | ||||
| } | ||||
| create_resources('create_resources::user', $users3) | ||||
|  | ||||
| # TODO - types are not applied in main stage | ||||
| $users = { | ||||
|   'sally-mae' =>  | ||||
|   {'ensure' => 'present', | ||||
|    'require' => 'User[bobby-joe]' | ||||
|   } | ||||
| }  | ||||
| create_resources('user', $users) | ||||
|  | ||||
| user { 'foobar': | ||||
|   ensure => present, | ||||
|   require => User['bobby-joe'] | ||||
| } | ||||
|  | ||||
| $classes = { | ||||
|   'create_resources' => { | ||||
|     'ensure' => 'present' | ||||
|   }  | ||||
| } | ||||
|  | ||||
| create_resources('class', $classes) | ||||
		Reference in New Issue
	
	Block a user
	 Dan Bode
					Dan Bode