Куда поместить файлы hiera в настройках puppet hiera

У меня есть работающая установка главного агента марионетки, и в настоящее время я пытаюсь выяснить, как использовать hiera для предоставления php.

Мой кукольный файл:

forge "http://forge.puppetlabs.com"

mod "jfryman/nginx"
mod "puppetlabs/mysql"
mod "mayflower/php"
mod 'puppetlabs-vcsrepo'
mod 'puppetlabs/ntp', '4.1.0'
mod 'puppetlabs/stdlib'

My site.pp:

hiera_include('classes')

Мой environment.conf, где поддерживается путь к модулям:

manifest = site.pp
modulepath = modules:site

Моя конфигурация hiera на марионеточном мастере в /etc/puppetlabs/puppet/hiera.yml:

---
:backends:
  - yaml
:hierarchy:
  - "nodes/%{::trusted.certname}"
  - "environment/%{server_facts.environment}"
  - 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:

Насколько я понимаю, общий конфиг, который должен присутствовать на всех серверах, идет в common.yaml. С этой настройкой мне удалось установить ntp на моем узле с этой конфигурацией в hieradata/common.yaml:

---
classes:
 - 'profile::base'

ntp::servers:
  - server 0.de.pool.ntp.org
  - server 1.de.pool.ntp.org
  - server 2.de.pool.ntp.org
  - server 3.de.pool.ntp.org

Теперь в моей иерархии также указано, что вся конфигурация конкретного узла должна находиться в hieradata/nodes/{fqdn-of-the-node}.yml.

Теперь, наконец, перейдя к моим вопросам:

У меня есть файл hieradata/nodes/myserver.example.com.yml, который содержит это:

classes:
  - 'profile::php'

И манифест под site/profile/manifests/php.pp:

class profile::php {
  class { '::php': }
}

Но это не обеспечивает php. Как вы видели, я использую mayflower/php из кузницы.

Теперь два моих вопроса:

Мой файл hiera для php находится в правильном месте? Чего мне не хватает, чтобы предоставить php моему агенту?


person Chrisissorry    schedule 18.01.2017    source источник


Ответы (1)


Здесь у вас есть несколько проблем/возможностей, поэтому давайте рассмотрим их итеративно.


Во-первых, вы используете значение по умолчанию datadir из:

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

Тем не менее, у вас есть приоритет:

"environment/%{server_facts.environment}"

Это не имеет смысла, поскольку у вас есть приоритет, который различает данные для узлов в зависимости от их среды каталогов, но вы также размещаете иерархические данные непосредственно в средах каталогов. Если вы хотите, чтобы приоритет был основан на среде каталога, измените каталог hieradata так, чтобы он находился за пределами прямой среды по адресу:

/etc/puppetlabs/code/hieradata

В противном случае вам следует удалить этот уровень из числа приоритетных, так как он не добавляет ценности и увеличивает время поиска.


Во-вторых, ты не показал свой site.pp, но помнил ли свой hiera_include('classes')? Это будет искать массив classes, а затем включать их, что, похоже, вам и нужно. Если вы этого не сделаете, то возникнет описанная вами проблема подготовки узла.


В-третьих, есть ли site в вашем modulepath? Вам нужно добавить его либо в puppet.conf, либо в environment.conf.


В-четвертых, fqdn вашего узла может не совпадать с certname. Проверьте каталог сертификатов на вашем Puppetmaster на наличие сертификата узла.


Боковые примечания:

  • В первой половине вашего вопроса содержится много лишней информации и отсутствует много полезной актуальной информации. Пожалуйста, отредактируйте вопрос, чтобы предоставить больше полезной информации и быть более кратким.
  • Поскольку ntp сработало, я предполагаю, что установка вашего модуля с r10k в каталоги среды прошла успешно. Также я предполагаю, что модули присутствуют для среды каталогов вашего узла.
  • Нет реальной причины указывать класс php как глобальный в вашем объявлении с ::php.
person Matt Schuchard    schedule 18.01.2017
comment
Спасибо! Я сократил вступление. Кроме того, я добавил свой site.pp и свой environment.conf, который содержит путь к модулю. Более того, я проверяю свои сертификаты с помощью puppet cert list --all, и имя сертификата включено туда и имеет +, что, как я понимаю, означает, что он был добавлен. Более того, я удалил часть среды из иерархии, как вы предложили. В любом случае, я не планировал его использовать. Тем не менее, он не предоставляет php. - person Chrisissorry; 18.01.2017
comment
На самом деле, я не знаю, что вы имеете в виду под глобальным модулем php. Модули присутствуют в моем пути к среде. - person Chrisissorry; 18.01.2017
comment
@Chrisissorry Я обновил ответ, чтобы уточнить комментарий к глобальной декларации php. - person Matt Schuchard; 18.01.2017