Acesso dinamicamente a uma variável de classe fantoche

1

É possível acessar dinamicamente uma variável em uma classe? Por exemplo:

class namespace::hello() {
    $cow = "moo"
    $dog = "bark"
}

$dynamic = 'cow'
$value = $namespace::hello::[$dynamic]  # doesn't work

Estou fazendo isso porque tenho classes definidas com variáveis nelas para cada ambiente, por exemplo:

class company::env::production {
    $dns = "1.2.3.4"
}

class company::env::office {
    $dns = "2.3.4.5"
}
    
por Gerald Kaszuba 06.01.2013 / 05:38

1 resposta

2

Eu encontrei uma solução desagradável. Espero que alguém possa me dar uma alternativa melhor.

Usando inline_template com scope.lookupvar , você pode fazer referência a uma variável dinâmica:

inline_template("<%= scope.lookupvar('$namespace::hello::${dynamic}') %>")

Atualizar

Devido à complexidade da solução, acabei de fazer um hack no topo desse hack. Eu fiz uma função personalizada que faz aquele forro:

module Puppet::Parser::Functions
  newfunction(:config, :type => :rvalue) do |arguments|

    if arguments.size != 2
      raise(Puppet::ParseError, "config(): 2 args required)")
    end

    env = arguments[0]
    var = arguments[1]

    lookupvar("::company::env::#{env}::#{var}")
  end
end

E no seu .pp :

$dns_server = config("production", "dns_server")
    
por 06.01.2013 / 06:59

Tags