Кукольный содержит не работает, чтобы заказать включение класса - PullRequest
1 голос
/ 30 октября 2019

Я пытаюсь форсировать класс Puppet, который создает файл для обработки до другого класса, которому нужен этот файл для правильной работы. После статьи Puppet Язык: ограничение ресурсов Я использую contain.

Мой код не работает, и я не понимаю, почему. Выдает эту ошибку:

Error: Evaluation Error: Error while evaluating a Function Call, Failed to parse template testing/def.erb:
  Filepath: /root/local/testing/templates/def.erb
  Line: 1
  Detail: No such file or directory @ rb_sysopen - /tmp/abc
 at /root/local/test2.pp:16:16 on node example.com

Вот код (урезанный):

### test2.pp
class klass1 {
  file { '/tmp/abc':
    content => 'xxx',
  }
}

# Stage 0 creates the file /tmp/abc.
class stage0 {
  contain klass1
}

# Stage 1 uses the contents of /tmp/abc to create the
# file /tmp/def.
class stage1 {
  file { '/tmp/def':
    content => template('testing/def.erb'),
  }
}

# Try to force stage0 to be loaded before stage1.
include stage0
class { 'stage1':
  require => Class['stage0']
}

### testing/templates/def.erb
Contents: <%= File.read("/tmp/abc") %>

Я использую Puppet 5.3.3.

1 Ответ

1 голос
/ 30 октября 2019

Проблема здесь связана не с защитой, а с зависимостью в вашем шаблоне во время компиляции при вызове File.read("/tmp/abc").

Обычно компиляция происходит на Puppet Master или Puppet Server, иФункция шаблона также выполняется в это время. Таким образом, ваш шаблон def.erb пытается прочитать из несуществующего файла во время компиляции на Puppet Master.

Лучшим решением может быть определение содержимого файла /tmp/abc в самой Puppet как данных илипеременной, а затем передать эту переменную в функцию-шаблон и таким образом полностью удалить зависимость от чтения из файла на диске.

Не полностью понимая, почему вы пытались разделить содержимое этого файла на несколько классов. Я не могу комментировать дальше.

...