Назад | Перейти на главную страницу

puppet: включить / отключить рекурсивные каталоги

Итак, у меня есть базовый модуль модификации, который применяется ко всем серверам, управляемым через 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 в иере, а не в манифесте.