
recebi a tarefa de implementar o script hiera puppet para gerenciar sites_enabled para nginx.
Aqui está meu script de fantoche:
comum.yaml
---
classes:
- nginx
nginx:
enabled:
abc.com
xyz.com
disabled:
test.com
test2.com
init.pp
class nginx{
create_resources("site_enabled", hiera("nginx"), {})
}
define site_enabled($name){
file { '/etc/nginx/sites_enabled/${name}':
ensure => 'link',
target => '/etc/nginx/site_available/${name}',
}
}
Mas recebi o erro quando o fantoche foi executado:
err: Não foi possível recuperar o catálogo do servidor remoto: Erro 400 no SERVER: não é possível converter String em Inteiro em /etc/puppet/modules/nginx/manifests/init.pp:7 no nó XX
Quando tentei consultar hiera via linha de comando:
$ aqui nginx
{"enabled"=>["abc.com", "xyz.com"]}
Eu sei que errei em algum lugar. Por favor, corrija-me. não entendo muito como hiera consulta e processa dados de array. por favor, indique-me algum documento útil, se for possível.
Muito obrigado.
Responder1
Suas perguntas são muito semelhantes àsProblemas ao criar hashes Hiera para create_resources, que tem uma resposta. Vou fornecer uma recapitulação aqui.
De acordo comdocumentação para create_resources, o hash deve estar no formato {title => {parameters} }
. Você deve editar seus dados hiera para definir os parâmetros. Como não há nenhum, acho que poderia ser assim:
comum.yaml
---
classes:
- nginx
nginx::enabled:
abc.com: {}
xyz.com: {}
nginx::disabled:
test.com: {}
test2.com: {}
Em seguida, você precisa realmente carregar os dados corretos do hiera. Você deseja carregar nginx::enabled
, nem todosnginx
init.pp
class nginx{
create_resources("site_enabled", hiera("nginx::enabled"))
}
define site_enabled($name){
file { '/etc/nginx/sites_enabled/${name}':
ensure => 'link',
target => '/etc/nginx/site_available/${name}',
}
}
Responder2
Obrigado Sciunus pela sua resposta rápida.
Posso fazer esta pergunta? eu gostaria de fazer meus dados yaml seguindo este tipo de formato:
nginx:
enabled: abc.com xyz.com disabled: test.com test2.com
NÃO quero fazer o formato assim:
nginx::enabled:
abc.com: {} xyz.com: {}
nginx::desativado:
test.com: {} test2.com: {}
Como posso fazer meu script de marionete funcionar conforme o esperado. Eu também li o documento Hiera, como eu sei, ele também suporta três tipos de dados de pesquisa: hiera, hiera_hash e hiera_array. mas não consegui fazer funcionar como esperado seguindo meu formato de arquivo yaml acima
Desculpe, sou muito novo no hiera.
Agradeço antecipadamente.