Привет всем,
Когда я применяю марионетку, я получаю сообщение об ошибке:
Warning: Scope(Mod::Cl[title]): Can't load '/tmp/file.yaml' File does not exist!
Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Operator '[]' is not applicable to an Undef Value.
Я указываю, что loadyaml - это функция модуля stdlib
Однако я хочу выполнить файловый ресурс перед определением ресурса
Кто-нибудь может мне помочь?
class mod::princ ( file { '/tmp/file.yaml': ensure => file, owner => 'root', group => 'root', mode => '0644', source => "puppet:///modules/othermod/file.yaml", before => Mod::Cl["title"], }-> Mod::Cl{ "title" : tmp_file => "/tmp/file.yaml", } } define mod::cl ( String $tmp_file, ){ $tmp = loadyaml("$tmp_file") $tmp[var].each |Integer $i, Hash[String,String] $var| { $mark=$var['Mark'] } }
Как упомянул Доминик в своем комментарии, loadyaml
функция запускается во время компиляции.
Если вы запускаете Puppet через Puppet Master / Server и puppet agent
, это происходит на сервере, прежде чем манифест будет отправлен клиенту, не на самом клиенте.
В дополнение loadyaml
функция выполняется в компилироватьне казнь - значит, файл должен существовать перед Кукольный пробег имеет место.
Я бы спросил, почему вы применяете этот подход в своем коде Puppet - вы на самом деле не объясняете, для чего предназначен код или как выглядит ваше предполагаемое конечное состояние.
Вы можете получить те же результаты, используя Hiera.
hieradata / common.yaml
---
mod::princ::data:
entry:
foo: bar
yrtne:
oof: rab
модули / мод / манифесты / princ.pp
class mod::princ (
Hash $data
) {
$data.each |Integer $i, Hash $elem, $var | {
$mark=$var['Mark']
}
}