Как получить список прикладных ресурсов

#puppet

Вопрос:

Я пытаюсь получить список прикладных ресурсов определенного типа, чтобы использовать их значения атрибутов.

У меня есть пользовательский ресурс (define), который создает файл в определенном каталоге. Я использую его в совершенно разных местах моего кода. Я пытаюсь удалить из этого каталога все, что не было определено в моем кукольном коде. Другими словами, я пытаюсь полностью управлять содержимым этого каталога. Но я не могу получить список всех определенных ресурсов этого типа для получения файлов, которыми я управляю. Ниже приведен отредактированный код для уточнения

Пользовательский ресурс

 define scheduler::job (
...
) {
  $job_name = $title
  $jobs_dir = $scheduler::jobs_dir

  file { "${jobs_dir}/${job_name}.yaml":
    ensure  => file,
    mode    => '0640',
    content => template('scheduler/job.yaml.erb'),
    notify  => Exec[$scheduler::reload_exec],
  }
}
 

Как это применимо

 scheduler::job { 'job-1': }
scheduler::job { 'job-2': }
 

То, что я пытаюсь сделать

 file { $scheduler::jobs_dir:
  ensure  => directory,
  group   => $group,
  mode    => '0640',
  owner   => $user,
  path    => $scheduler::jobs_dir,
  purge   => true,
  recurse => true,
  force   => true,
  ignore  => <<LIST OF CREATED FILES AKA JOB_NAME>>,
}
 

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

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

Ответ №1:

Оказывается, вы можете использовать purge recurse в определении file ресурса для очистки всех файлов, не управляемых puppet. Так что решение довольно простое:

 file { $scheduler::jobs_dir:
  ensure  => directory,
  purge   => true,
  recurse => true,
}