Puppet - É possível usar um var global para puxar um template com o mesmo nome?

1

Eu sou novo no fantoche. Como tal, estou tentando contornar a melhor maneira de configurar meus manifestos que fazem sentido. Seguindo o princípio DRY (não se repita), estou tentando carregar diretivas comuns em um modelo e, em seguida, carregar diretivas específicas do ambiente a partir de um arquivo correspondente ao ambiente. Basicamente assim:

# nodes.pp
node base_dev {
    $service_env = 'dev'
}

node 'service1.ownij.lan' inherits base_dev {
    include global_env_specific    
}

class global_env_specific {
    include shell::bash
}

# modules/shell/bash.pp
class shell::bash inherits shell {

    notify{"Service env: ${service_env}": }

    file { '/etc/profile.d/custom_test.sh':
        content => template('_global/prefix.erb', 'shell/bash/global.erb', 'shell/bash/$service_env.erb'),
        mode    => 644
    }
}

Mas toda vez que executo puppet agent --test , o fantoche reclama que não é possível encontrar o arquivo shell/bash/$service_env.erb , mas verifiquei se ele existe. Eu sei que o var está acessível devido à declaração de notificação que produz o valor esperado, então eu suspeito que estou fazendo o que não é permitido.

Eu sei que eu poderia ter um único template.erb e passar variáveis para o modelo, o que funcionaria nesse caso porque o arquivo custom.sh é pequeno e poucas mudanças em ambientes, mas para configurações mais complexas (httpd, solr , etc) Eu prefiro acessar arquivos específicos do ambiente. Também estou ciente de que posso especificar caminhos de módulo específicos do ambiente, mas prefiro apenas lidar com esse comportamento no nível do modelo, em vez de ter vários diretórios de nome restrito.

Obrigado.

    
por Mike Purcell 18.10.2012 / 00:39

1 resposta

5

Você está usando aspas simples para 'shell/bash/$service_env.erb' , o que significa que nenhuma variável será interpolada . Você deve usar aspas duplas.

    
por 18.10.2012 / 00:46