Estou tentando usar a heira para substituir os parâmetros de classe no fantoche. Eu tenho essa classe:
class test(
$parameter1="codeddefault"
)
{
notify {"parameter1 is $parameter1": }
}
Este é o meu hiera.yaml:
---
version: 5
defaults:
# The default value for "datadir" is "data" under the same directory as the hiera.yaml
# file (this file)
# When specifying a datadir, make sure the directory exists.
# See https://docs.puppet.com/puppet/latest/environments.html for further details on environments.
# datadir: data
# data_hash: yaml_data
hierarchy:
- name: "Per-node data (yaml version)"
path: "nodes/%{::trusted.certname}.yaml"
- name: "Group (Server class or function. e.g. lg for logging server)"
path: "groups/%{facts.group}.yaml"
- name: "Other YAML hierarchy levels"
paths:
- "common.yaml"
O fato de definir "grupos" é desativado em uma substring do nome do host, de acordo com alguma convenção interna de nomenclatura. O que essa convenção é, não é importante para os propósitos desta questão. Escusado será dizer que eu verifiquei que funciona como esperado, como saída mais tarde irá mostrar.
Vamos supor para os propósitos desta questão que o grupo neste caso, é "inlg" Minha expectativa é que eu seja capaz de colocar o seguinte em "inlg.yaml":
test::parameter1: groupvalue.
E quando eu executo meu manifesto (que inclui a classe de teste) que o recurso de notificação deve gerar:
parameter1 is groupvalue
No entanto, este não é o caso. Em vez disso, retorna "codeddefault"
Para testar mais o problema, defino os seguintes valores em "{:: trusted.certname} .yaml"
testvalue: host
e isso em inlg.yaml:
testvalue: group
Eu adiciono isso à turma:
$testvalue = lookup("testvalue")
notify {"testvalue is $testvalue": }
Previsivelmente, o código retorna que testvalue é igual a "host". Isso faz sentido para mim, pois o valor no mais específico "{:: trusted.certname} .yaml" está substituindo o valor em inlg.yaml (embora uma pesquisa "normal" e não um parâmetro de classe)
Se eu, então, remover
testvalue: host
de "{:: trusted.certname} .yaml"
testvalue então é igual a "group"
Qual, novamente, é o que eu esperaria.
Para confundir mais as coisas, se eu definir isso em {:: trusted.certname} .yaml:
test::parameter1: blah
Em seguida, o recurso de notificação na classe mostrada acima retorna "blah"
Se eu remover
test::parameter1: blah
de {:: trusted.certname} .yaml, o valor de parameter1 mais uma vez retorna para "codeddefault"
Estou esperando que ele pegue o valor do arquivo yaml "group" (inlg.yaml) como as pesquisas "normais".
O que estou perdendo?
Obrigado antecipadamente.