Итак, у меня есть базовый модуль модификации, который применяется ко всем серверам, управляемым через hiera. Один подмодуль называется «файлы» и помещает сценарии в / usr / local / bin / каждого сервера. Таким образом, он перебирает каталог файлов и копирует соответствующие файлы. Это нормально работает, если я добавлю модуль.
Теперь я хочу сделать этот модуль управляемым через hiera с помощью $ enabled = true | false. Проблема в том, что при установке параметра sure => absent он удаляет каталог bin и печатает сообщения об ошибках, что он не может удалить файлы, по-видимому, потому, что каталог bin уже удален. Итак, я хочу просто удалить файлы и оставить сам каталог bin.
Любые идеи?
Я наткнулся на эту старую ошибку, которая, кажется, описывает ту же проблему, которая, похоже, была исправлена.
ОБНОВИТЬ: Дело в том, чтобы не ссылаться на каждый файл в манифесте. Вот почему я хочу использовать рекурсию.
files/ files/devvm files/devvm/script1.sh files/devvm/live.sh files/devvm-tpl.dev files/devvm-tpl.dev/testscript2.pl files/common files/common/change_hostname.sh files/srvDC221 files/srvDC221/wurst
class basemodifications::files ( $enabled = "true", ) { file { 'usrlocalbin': ensure => $enabled ? { "true" => present, "false" => absent, }, recurse => true, ignore => "*~", purge => true, owner => root, group => root, path => "/usr/local/bin/", #force => true, #will delete the bin directory sourceselect => all, source => ["puppet:///modules/tebasemod/common", "puppet:///modules/tebasemod/${::tecluster}", "puppet:///modules/tebasemod/${::fqdn}",] } }
err: /File[/usr/local/bin/wurst]/ensure: change from absent to file failed: Could not set 'file on ensure: No such file or directory - /usr/local/bin/wurst.puppettmp_6753
Вы хотите убедиться, что определенный набор файлов присутствует или отсутствует в каталоге, верно? Вы никогда не хотите, чтобы Puppet удалял сам каталог и все его содержимое? Тогда вам нужно управлять ресурсами индивидуально, а не повторно. Что-то вроде
file { '/usr/local/bin':
ensure => directory,
owner => root,
group => root,
}
$scripts = ['/usr/local/bin/script1.sh', '/usr/local/bin/live.sh']
file { $scripts:
ensure => $enabled ? {
"true" => file,
"false" => absent,
},
owner => root,
group => root,
require => File['/usr/local/bin'],
}
Поскольку вам нужно, чтобы сценарии менялись для разных хостов, вы можете установить $scripts
в иере, а не в манифесте.