You don't have access to the configs variable What you do have access to is the $title variable, which I think is what you want. This is automatically set by puppet to the name of the defined type's instance. In this case, config1, config2... config100.
http://docs.puppetlabs.com/puppet/latest/reference/lang_defined_types.html#title-and-name On Monday, March 11, 2013 10:46:52 AM UTC-7, jc.listmail wrote: > > So, this is mostly working now (thanks for the pointers!), but how can I > reference the top level "configs" within my define? For example: > > configs: > config1: > Name: app1 > WorkingDir: /var/app1 > config2: > Name: app2 > WorkingDir: /var/app2 > ... > config100: > Name: app100 > WorkingDir: /var/app100 > > define app::virtualApps($Name, $WorkingDir) { > file {"/etc/apps/$configs[0].conf": > owner => root, > group => root, > mode => 644, > content => template("app/foo.conf.erb" > } > I want to be able to reference "config1", "config2", ... "config100" as a > variable ($config)from within the define. In this case, using them as the > base file name for each instance of a config file. > > The error I get when trying to process this file is: > > Error: Could not retrieve catalog from remote server: Error 400 on SERVER: > Must pass config to app::virtualApps[config1] > > > On Fri, Mar 8, 2013 at 2:49 PM, Ellison Marks <[email protected]<javascript:> > > wrote: > >> Through create_resources, Name and WorkingDir are being passed to your >> defined type as parameters. Your defined type though, does not accept >> parameters. something like this: >> >> define app::virtualApps($Name, $WorkingDir) { >> >> should work, though you'll also have to work out case, as it seems you're >> using lower case in your template and upper in your YAML. The YAML, defined >> type parameters and template should all match, variable name-wise. >> >> >> On Friday, March 8, 2013 2:18:30 PM UTC-8, jc.listmail wrote: >>> >>> I'm trying to use create_resources to create a series of files with >>> semi-custom content based on a template. >>> >>> This is what I have: >>> >>> foo.conf.erb: >>> Name "<%= name %>" >>> WorkingDir "<%= working_dir %>" >>> ... a bunch of static entries >>> >>> YAML: >>> >>> configs: >>> config1: >>> Name: app1 >>> WorkingDir: /var/app1 >>> config2: >>> Name: app2 >>> WorkingDir: /var/app2 >>> ... >>> config100: >>> Name: app100 >>> WorkingDir: /var/app100 >>> >>> manifest: >>> class app { >>> >>> create_resources(app::**virtualApps, hiera('configs')) >>> >>> } >>> >>> define app::virtualApps() { >>> file {"/etc/apps/$app.conf": >>> owner => root, >>> group => root, >>> mode => 644, >>> content => template("app/foo.conf.erb" >>> } >>> >>> >>> I know this is not correct. I am missing at least one important concept >>> here. What I am stuck on is how, using create_resources, I can reference >>> the parameters named in the YAML config so that I end up with a config file >>> on the file system for each. My understanding of create_resources was that >>> this would be a good use for it, in that it will call app::virtualApps() >>> once for each hash defined under "configs" in the YAML file, which should >>> result in the structure I want. What I am not getting is what the >>> datastructure looks like that is being provided to app::virtualApps() and >>> how you can reference those parameters, both in the define AND the >>> associated template. >>> >>> I'd like to end up with: >>> >>> /etc/apps/app1-100.conf with the contents that look like: >>> >>> Example: >>> >>> /etc/apps/app1.conf: >>> Name "app1" >>> WorkingDir: "/var/app1" >>> <bunch of static entries that are the same in each file> >>> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "Puppet Users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To post to this group, send email to [email protected]<javascript:> >> . >> Visit this group at http://groups.google.com/group/puppet-users?hl=en. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/puppet-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
