Поиск Puppet Hiera в манифесте не работает

Я изучаю Puppet и только что прочитал о Hiera.

Прежде чем перейти к проблеме, я предоставляю некоторые настройки конфигурации ниже:

$ cat /etc/puppetlabs/puppet/puppet.conf
[master]
codedir = /etc/puppetlabs/code

[agent]
server = puppet.example.com

[master]
certname = puppet.example.com

[master]
vardir = /var/opt/puppetlabs/puppetserver
ssldir = $vardir/ssl

[main]
environmentpath = /etc/puppetlabs/code/environments
basemodulepath = /etc/puppetlabs/code/modules


$ cat /etc/puppetlabs/puppet/hiera.yaml
---
:backends:
  - yaml
:hierarchy:
  - "nodes/%{::trusted.certname}"
  - common

:yaml:
# datadir is empty here, so hiera uses its defaults:
# - /etc/puppetlabs/code/environments/%{environment}/hieradata on *nix
# - %CommonAppData%\PuppetLabs\code\environments\%{environment}\hieradata on Windows
# When specifying a datadir, make sure the directory exists.
  :datadir:

ОБНОВЛЕНИЕ: пройдя через ответ @um-FelixFrank, я изменил расположение файла конфигурации Hiera по умолчанию. Файл конфигурации имеет следующее содержимое:

$ cat /etc/puppetlabs/code/hiera.yaml
---
:backends:
 - yaml
:hierarchy:
 - "hostname/%{facts.hostname}"
 - "os/%{facts.osfamily}"
 - common
:yaml:
 :datadir: /etc/puppetlabs/code/hieradata

Я создал каталог hieradata под /etc/puppetlabs/code

$ ll /etc/puppetlabs/code/
total 4
drwxr-xr-x. 4 root root  32 Dec 20 11:17 environments
drwxr-xr-x. 3 root root  39 Dec 21 12:22 hieradata
-rw-r--r--. 1 root root 153 Dec 20 16:51 hiera.yaml
drwxr-xr-x. 2 root root   6 Dec 21 11:02 modules

$ cat /etc/puppetlabs/code/hieradata/common.yaml
---
puppet::status: 'running'
puppet::enabled: true

Я попытался перезаписать вышеуказанные значения в моем файле yaml имени хоста, как указано в разделе:

$ cat /etc/puppetlabs/code/hieradata/hostname/delvmplgc1.yaml
---
puppet::status: 'stopped'
puppet::enabled: false

$ facter hostname
delvmplgc1

Я создал образец манифеста на сервере Puppet, чтобы посмотреть, могу ли я выполнить поиск Hiera в манифесте.

$ cat /etc/puppetlabs/code/environments/qa/manifests/hierasample.pp
notify { 'welcome':
        message => "Hello!",
}

$status = lookup({ name => 'puppet::status', default_value => 'running' })
$enabled = lookup({ name => 'puppet::enabled', default_value => true })

service { 'puppet':
        ensure => $status,
        enable => $enabled,
}

Теперь проблема в том, что когда я пытаюсь выполнить манифест, я не вижу сообщений, связанных с Hiera.

$ puppet apply /etc/puppetlabs/code/environments/qa/manifests/hierasample.pp
Notice: Compiled catalog for delvmplgc1.sapient.com in environment production in 0.99 seconds
Notice: Hello!
Notice: /Stage[main]/Main/Notify[welcome]/message: defined 'message' as 'Hello!'
Notice: Applied catalog in 0.10 seconds

Любая помощь будет оценена.


person Technext    schedule 21.12.2016    source источник
comment
Можете ли вы добавить содержание /etc/puppetlabs/puppet/hiera.yaml к вопросу?   -  person Dominic Cleal    schedule 21.12.2016
comment
Обновил пост содержанием /etc/puppetlabs/puppet/hiera.yaml   -  person Technext    schedule 21.12.2016


Ответы (1)


Как указано в комментарии к стандартному hiera.yaml, datadir находится в

/etc/puppetlabs/code/environments/%{environment}/hieradata

Поэтому вместо того, чтобы создавать hieradata непосредственно в /etc/puppetlabs/code, переместите его на два уровня вниз в /etc/puppetlabs/code/environments/qa и другие среды.

person um-FelixFrank    schedule 21.12.2016
comment
Я попытался изменить расположение файла конфигурации hiera по умолчанию вместо использования hiera_config = $codedir/hiera.yaml, и он подхватил изменение. Спасибо, что указали на ошибку! :) - person Technext; 21.12.2016
comment
Однако есть еще один вопрос: перезаписанные значения в файле delvmplgc1.yaml, показанные в моем посте, изменяют как «статус», так и «включено» на «остановлено» и false соответственно. Однако в выводе марионетки упоминается только: Notice: /Stage[main]/Main/Service[puppet]/ensure: ensure changed 'running' to 'stopped'. Следует также упомянуть Notice: /Stage/Main/Service[puppet]/enable: enable changed 'true' to 'false'. Есть идеи, почему это пропущено? - person Technext; 21.12.2016
comment
Я вставил содержимое своего пользовательского файла hiera.yaml в свой пост. - person Technext; 21.12.2016
comment
@Technext Вывод из вашего комментария здесь несовместим с выводом в вашем вопросе. Кроме того, Феликс Франк сказал вам изменить свое hieradata местоположение, а не hiera.yaml местоположение. Вы, вероятно, не должны были перемещать это. - person Matt Schuchard; 21.12.2016
comment
@Technext имейте в виду, что, сделав вашу среду данных Hiera независимой, вы не сможете вносить изменения в непроизводственные среды и т. Д., Так что это обычно плохой ход. Что касается предполагаемого неправильного поведения, я советую выполнить отладку на более низком уровне, например, распечатать значения переменных с помощью notify и так далее. Наконец, если это продолжает действовать, воздержитесь от редактирования вопроса несколько раз и подумайте о том, чтобы задать новый, более острый вопрос. - person um-FelixFrank; 21.12.2016
comment
@MattSchuchard: вывод в комментарии — это тот, который я получил после изменения местоположения файла конфигурации hiera. Кстати, я знаю, что Феликс не просил меня изменить местоположение конфигурации. :) Я хотел попробовать его предложение, а также хотел посмотреть, могу ли я изменить местоположение конфигурации. Это было сделано исключительно для целей тестирования. - person Technext; 22.12.2016
comment
@ um-FelixFrank: я полностью согласен с тем, что изменение местоположения конфигурации Hiera не поможет мне при использовании нескольких сред. Это действительно плохо, но было сделано только в качестве теста. Я переместил каталог hieradata в ожидаемое место. На самом деле все это произошло потому, что я читал «Learning Puppet 4», в котором предлагалось (Глава 11: Отделение данных от кода) создать директорию hieradata внутри /etc/puppetlabs/code/. В любом случае, что касается проблемы с выводом, я проверю использование переменных, и если это произойдет снова, я опубликую новый вопрос. Спасибо за вашу помощь. - person Technext; 22.12.2016