Hello list, I have some services that may be duplicated in some machines. 
They are much like an Apache vhost. In order to remove details from my 
manifests, I moved the service names to ENC because they are 
machine-dependent. Here are my datasources and manifests:

ENC:
parameters:
  myservices:
    host1:
      myperserviceconfig
    host2:
      myperserviceconfig

Hiera:
myservice_host:
  myproblematicconfig:
    config1:
      data
    config2:
      data
  myotherconfig:
  ...

Manifests:
  class profile::my::myservice {
    # ENC: $myservices
    $hiera_myservice_host = hiera("myservice_host")
    # ENC has per-host/service and hiera has per-environment configurations
    create_resources(::myservice::host, $myservices, $hiera_myservice_host)
  }

  define myservice::host (myconfigs...) {
    ...
    if $myproblematicconfig {
      create_resources(::myservice::myconfig, $myproblematicconfig)
    }
  }

Each myproblematicconfig key is a new resource and I can have zero to N 
keys. This configuration is working nice if I have only one service, but if 
I have two or more services, Puppet Master correctly says:

  Error: Could not retrieve catalog from remote server: Error 400 on 
SERVER: Duplicate declaration: myservice::myconfig[config1] is already 
declared

Tried prefix (from puppetlabs/stdlib) in order to change the resource name 
but it only supports arrays. Changing create_resources to $var.each should 
help but it requires parser=future which I cannot use right now. Do you see 
another approach I could try?

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/23c7967c-f732-4d6a-b2d4-a8c4347f48a9%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to