кукольный / иера: класс модуля не может быть найден во время применения куклы - PullRequest
0 голосов
/ 26 февраля 2019

Во время кухонной конвергенции, вызвав марионетку, я получил эту ошибку:

Error: Evaluation Error: Error while evaluating a Function Call, Could not find class ::alibi for ... at .. entry.pp 

alibi - это имя модуля, а:

/tmp/kitchen>ll
total 8
drwxrwxr-x. 4 kitchen kitchen  80 Feb 26 14:14 hiera
 -rw-rw-r--. 1 kitchen kitchen 170 Feb 26 14:14 hiera.global.yaml
drwxrwxr-x. 2 kitchen kitchen 100 Feb 26 14:35 manifests
drwxrwxr-x. 4 kitchen kitchen  80 Feb 26 14:14 modules
-rw-rw-r--. 1 kitchen kitchen 901 Feb 26 13:53 puppet.conf
/tmp/kitchen>more  manifests/entry.pp manifests/init.pp
::::::::::::::
manifests/entry.pp
::::::::::::::
  hiera_include('classes')
::::::::::::::
manifests/init.pp
::::::::::::::

class alibi () {

    $instances = hiera_hash("alibi::instances", {})
    validate_hash($instances)
    create_resources("alibi::instance", $instances)

}
/tmp/kitchen>/tmp/kitchen>more hiera.global.yaml
---
:backends:
- yaml

:yaml:
 :datadir: "/tmp/kitchen/hiera"

:hierarchy:

- tests/%{hostname}
- origin/main

# options are native, deep, deeper
:merge_behavior: deeper
/tmp/kitchen>/tmp/kitchen>more hiera/origin/main.yaml
classes:
 - alibi

Команда:

 export MANIFESTDIR='/tmp/kitchen/manifests'; sudo -E env 
 http_proxy=http://proxy-internet.localnet:3128 
 https_proxy=http://proxy-internet.localnet:3128  puppet apply 
 /tmp/kitchen/manifests/entry.pp --modulepath=/tmp/kitchen/modules 
 --fileserverconfig=/tmp/kitchen/fileserver.conf 
 --hiera_config=/tmp/kitchen/hiera.global.yaml --detailed-exitcodes -v 

Это нормально, если я использую init.pp вместо entry.pp (но hiera_include () не вызывается)

1 Ответ

0 голосов
/ 26 февраля 2019

Ваш код должен быть правильно размещен в модулях.Когда Puppet ищет класс с именем alibi, он проверяет каждый каталог в вашем модуле пути (неясно, что это в вашем случае, но, возможно, просто /tmp/kitchen/modules) для файла alibi/manifests/init.pp.Рабочий каталог и каталог манифеста не имеют значения, по крайней мере, в любой версии Puppet, которая должна использоваться где-либо еще.

Однако это конкретное имя является частным случаем, поскольку оно будет интерпретироваться какимя основного класса модуля.Другие классы и определенные типы в том же модуле будут отображаться немного по-другому.Например, alibi::good будет сопоставлен с alibi/manifests/good.pp, а alibi::alibi будет сопоставлен с alibi/manifests/alibi.pp.

Это нормально, если я использую init.pp вместо entry.pp (ноhiera_include () не вызывается)

Ну да и нет.Puppet не полагается на соглашения о сопоставлении файлов и проверяет текущий каталог, когда вы явно указываете ему, какой файл оценивать.Поэтому, когда вы явно указываете ему init.pp, он находит и оценивает этот файл.Но нет, оценка этого файла сама по себе бесполезна: Puppet проанализирует объявление класса, но в этом манифесте нет ничего, что говорило бы применить этот класс к целевому узлу.

...