Puppet: вызов типа определения в классе из hiera

Я хотел бы создать модуль install_package, который можно вызывать несколько раз, где пакеты определены в hiera. Я знаю, что класс - это skelton (может быть вызван один раз), а тип определения предназначен для моей цели.

Я разработал следующее: hiera.yaml

---
version: 5
hierarchy:
  - name: "Common hierarchy level"
    path: "common.yaml"

./ data / common.yaml

---
install_package::packages:
  - vim
  - logrotate

classes:
  - install_package

./ module / install_package / manifest / init.pp

class install_package(
  packages=[],
) {

  define def_package()
    notify{"package to install is $name":}
  }

  def_package{ [$packages]: }
}

Марионетка возвращает " Ошибка при оценке заявления ресурса, неизвестный тип ресурса: 'def_package' ".

Мой вопрос: как я могу определить пакеты для установки в переменной (массиве), например, в /data/common.yaml, а затем несколько раз вызвать модуль install_package с определением типа?

0
задан 9 October 2019 в 12:50
1 ответ

Ошибка, которую вы видите, является областью действия проблема. Определенный тип def_package был определен в классе install_package , поэтому его полное имя на самом деле install_package :: def_package . В Puppet классы и определенные типы должны объявляться с использованием их полного имени.

Это работает:

$ cat hiera.yaml
---
version: 5
hierarchy:
  - name: "Common hierarchy level"
    path: "common.yaml"
$ cat data/common.yaml
---
install_package::packages:
  - vim
  - logrotate

classes:
  - install_package
$ cat modules/install_package/manifests/init.pp
class install_package (
  $packages = [],
) {
  define def_package() {
    notice("package to install is ${name}")
  }

  install_package::def_package { $packages: }
}
$ puppet apply --hiera_config hiera.yaml -e "hiera_include('classes')" --modulepath modules
Notice: Scope(Install_package::Def_package[vim]): package to install is vim
Notice: Scope(Install_package::Def_package[logrotate]): package to install is logrotate
Notice: Compiled catalog for it070137.bris.ac.uk in environment production in 0.06 seconds
Notice: Applied catalog in 0.03 seconds

Я бы заметил, что определение классов и определенных типов внутри класса не является хорошим стилем и делает puppet-lint жалуются.

Кроме того, Puppet в наши дни демонстрирует циклы поддержки, поэтому нет необходимости использовать определенные типы с массивами в качестве обходного пути. Попробуйте выполнить цикл .each :

$ cat modules/install_package/manifests/init.pp
class install_package (
  $packages = [],
) {
  $packages.each |$name| {
    notice("package to install is ${name}")
  }
}
$ puppet apply --hiera_config hiera.yaml -e "hiera_include('classes')" --modulepath modules
Notice: Scope(Class[Install_package]): package to install is vim
Notice: Scope(Class[Install_package]): package to install is logrotate
Notice: Compiled catalog for it070137.bris.ac.uk in environment production in 0.05 seconds
Notice: Applied catalog in 0.03 seconds
0
ответ дан 5 December 2019 в 00:28

Теги

Похожие вопросы