$ file является атрибутом. Если вы хотите использовать имя экземпляра определения (один из элементов в массиве, который вы используете при объявлении aptfile), вы должны использовать $ name.
Итак, если бы вы сохранили все как есть, вы бы сделайте что-нибудь вроде этого:
aptfile {'somename':
file => ['apt.conf', 'sources.list'],
}
Однако то, что вы, вероятно, ищете, будет примерно таким:
define aptfile(
$base_path = '/etc/apt',
) {
file {"${base_path}/${name}":
source => "puppet:///modules/${module_name}/files/${name}",
}
}
Обратите внимание, что $ name происходит от заголовка / имени ресурса (define, по сути, является своего рода настраиваемым ресурсом), когда вы объявить это. Применяется ко всем ресурсам. Когда вы используете массив при объявлении файла ресурсов {['f1.txt', 'f2.txt']:}, вы просто уплотняете объявление нескольких файловых ресурсов ... file {'f1.txt':}, file {'f2.txt':}. $ name внутри тела - это имя объявления ресурса в игре, пока оно анализируется / обрабатывается.
Затем назовите его, как вы:
aptfile {['apt.conf', 'sources.list']: }
Я просто использую шаблоны с content => template ('modulename / somefile.erb'), даже если мне не нужны функциональные возможности шаблона только потому, что путь более разумный (с минимальными дополнительными накладными расходами, как мне кажется). С нетерпением жду source => принятия того же более разумного использования пути.
Марк