2013-10-10 2 views
1

используя кукольный, мне нужно создать три файла, с этим содержимым:

/tmp/f1.txt: hello /tmp/f1.txt 
/tmp/f2.txt: hello /tmp/f2.txt 
/tmp/f3.txt: hello /tmp/f3.txt 

я стараюсь следующим образом:

$path="/tmp/" 
$my_files = ["$path/f1.txt", "$path/f2.txt", "$path/f3.txt"] 
file { $my_files: 
    ensure => file, 
    content => "hello $name\n", 
} 

однако это не работает, потому что имя $ undefined.

есть переменная, которая создается для каждой итерации и что я могу использовать?

пс: я знаю, что я мог бы создать новый тип ресурса следующим образом:

define file_with_content { 
    file { $name: 
    ensure => file, 
    content => "hello $name\n", 
    } 
} 
$path="/tmp/" 
$my_files = ["$path/f1.txt", "$path/f2.txt", "$path/f3.txt"] 
file_with_content { $my_files: } 

, но это требует создания нового типа ресурса, и я не могу сделать это в моем контексте (который не объясняется Вот).

Вопрос в том, как изменить первый код, чтобы он работал, не определяя новый тип ресурса и не выполняющий код оболочки?

ответ

2

Вы можете получить доступ только к namevar для определенных типов. Для ресурсов Puppet результаты непредсказуемы - например, $name за File предоставит вам main или текущий stage. Кроме того, вы не можете передавать/использовать дополнительные параметры ресурсам Puppet, поскольку они уже имеют свой собственный набор параметров.

Стандартное решение состоит в том, чтобы обернуть объявление File определенным типом like here, как и ваш первый. Возможно, вы можете объяснить, почему это невозможно использовать, поэтому можно было бы разработать другое решение?

+0

Я не могу использовать определение здесь, потому что я уже в определении, и кажется, что мы не можем иметь вложенные определения. –

+0

Вложенные классы/определения обычно представляют собой плохую идею: http://docs.puppetlabs.com/puppet/3/reference/lang_classes.html. Их можно выставить снаружи без особых проблем, а затем обратиться в другой класс. Что тебя останавливает? – xiankai

+0

вы можете определить класс или класс внутри класса. но вы не можете определить внутри внутри define. это верно? –

Смежные вопросы