Substituindo os parâmetros da classe Puppet por hiera

1

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.

    
por GeoSword 13.05.2018 / 08:30

0 respostas

Tags