Передача массива yaml, содержащего данные пакета, марионетке через Hiera - PullRequest
0 голосов
/ 12 марта 2019

версия кукол: 4.9.4 версия hiera: 3.3.1

Я пытаюсь сделать так, чтобы httpd перезагрузился, когда установлена ​​новая версия package-x / y, и это не кажетсякак массив из Hiera передается правильно.

для моего файла httpd.pp у меня есть:

class service::common::httpd (
  $service_state = undef, # undef = unmanaged
  $service_run_at_boot = undef,
  $packages = undef
  ) {
    service { 'httpd':
      ensure     => $service_state,
      enable     => $service_run_at_boot,
      subscribe  => $packages,
      restart    => "/usr/sbin/apachectl graceful"
    }
  }

и в файле yaml для hiera, у меня есть:

service::common::httpd::packages: [Package['package-x'],Package['package-y']]

запуск кукол с этим даетошибка

Error: Evaluation Error: Error while evaluating a Function Call, Lookup of key 'allow_virtual_packages' failed: Unable to parse (/root/repos/puppet-config/data/nodes/<location of yaml file>): did not find expected ',' or ']' while parsing a flow sequence

также говорит, что это missing a comma between flow collection entries.Я пробовал также много разных комбинаций пробелов и запятых ..

Я также пытался включить пакеты внутри класса с помощью оператора include.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Утилита yamllint весьма полезна для анализа YAML-файлов Puppet Hiera.Когда я попробовал его на вашем файле, я получил:

▶ yamllint spec/fixtures/hiera/data/common.yaml 
spec/fixtures/hiera/data/common.yaml
  2:25      error    syntax error: expected ',' or ']', but got '['
  2:39      error    too few spaces after comma  (commas)

Синтаксическая ошибка показывает, что файл просто недействительный YAML.

Но как это исправить?

Смущает, что строка в манифесте Puppet, такая как:

  subscribe => [Package['package-x'], Package['package-y']]

При компиляции в каталог кукол JSON становится:

  "subscribe": ["Package[package-x]", "Package[package-y]"]

И вы можете поместить ту же строку JSON в файл YAML, чтобысделать допустимый YAML следующим образом:

service::common::httpd::packages: ["Package[package-x]", "Package[package-y]"]

Вы также можете использовать одинарные кавычки в YAML, т.е.

service::common::httpd::packages: ['Package[package-x]', 'Package[package-y]']

Подробнее о том, как скомпилировать каталог Puppet, в моем сообщении в блоге здесь .

0 голосов
/ 13 марта 2019

цитаты.

Иера не знает, что такое Package. просто процитируй это, так как это строка.

service :: common :: httpd :: packages: ["Package ['package-x']", "Package ['package-y']"]

отлично работает.


или вы можете просто изменить [ "Package['package-x']", "Package['package-y']" ] на [ 'package-x', 'package-y' ]

работает без нареканий. см. ниже.

host01.yaml

beats::packetbeat::packages: [ acl, htop ]

packetbeat.pp

class beats::packetbeat (
    $packages = undef
) {
    package {
        "packetbeat":
            ensure    => "$version",
            subscribe => Package[$packages],
        ;
    } 
}

Примечание: / Stage [main] / Beats :: Packetbeat / Package [acl] / обеспечить: current_value 'отсутствует', должно быть '2.2.51-14.el7' (noop)

Примечание: / Stage [main] / Beats :: Packetbeat / Package [packetbeat]: будет иметь вызвано «обновление» от 1 события

Примечание: / Stage [main] / Beats :: Packetbeat / Service [packetbeat]: будет иметь вызвал «обновление» из 2 событий

Примечание: класс [Beats :: Packetbeat]: вызвал бы «обновление» с 3 события

...