проблема выполнения кукол после создания файла - PullRequest
0 голосов
/ 24 марта 2020

Я не знаю, чтобы решить эту проблему. Я хочу запустить команду postmap после создания или изменения файла.

        ensure => 'present',
        value  => 'hash:${postfix_path}${virtual_alias_maps}',
        #notify => Exec['generate ${postfix_path}${virtual_alias_maps}']   }

      file {"${name}":
        ensure  => $ensure,
        require => [File[$name], Exec["generate ${name}"]],   }

      exec { 'generate ${name}':
        command     => 'postmap ${name}',
        path        => $::path,
        subscribe   => File[$name],
        refreshonly => true   
     }
´´´

1 Ответ

0 голосов
/ 25 марта 2020

Строки в одинарных кавычках не подлежат переменной интерполяции. Вместо этого используйте строки в двойных кавычках, если вы хотите интерполяцию, например:

  exec { "generate ${name}":
    command     => "postmap ${name}",
    path        => $::path,
    subscribe   => File[$name],
    refreshonly => true   
 }

Это также предполагает, что переменная $::path действительно содержит путь, подходящий для поиска исполняемого файла postmap. Это возможно, но я склонен сомневаться, что это действительно так. Существует ли такая неопределенность относительно того, где установлен этот исполняемый файл (и где установлены внешние программы, которые он выполняет), что вы не можете указать буквальный путь, которого будет достаточно?

Кроме того, существуют отдельные проблемы с file представленное объявление:

      file {"${name}":
        ensure  => $ensure,
        require => [File[$name], Exec["generate ${name}"]],   }
  • объявленный ресурс File выражает зависимость от самого себя. Это создает зависимость l oop, которая приведет к сбою построения каталога.

  • объявленный ресурс File выражает зависимость от Exec["generate ${name}"], причем этот ресурс также выражает зависимость от него (subscribe имеет это среди своих эффектов). Это составляет еще одну отдельную зависимость l oop, которая приведет к сбою построения каталога. Между этим и предыдущим вы, вероятно, просто хотите полностью удалить атрибут require.

  • вы обеспечиваете состояние файла, указанное в переменной $ensure. Хотя это по своей сути не является ошибкой, вы должны быть уверены, что эффекты являются правильными для всех случаев. В частности, если вы гарантируете, что файл absent, то, вероятно, неправильно запускать Exec, когда файл переходит в это состояние. Если возможно гарантировать, что файл будет directory, то это, вероятно, также не будет хорошо воспроизводиться с эффектом Exec.

Кроме того, вы не непосредственное управление содержимым файла, его владельцем или режимом. Это может быть хорошо, а может быть, даже и желательно, но я рекомендую подумать, возможно ли, чтобы Puppet полностью контролировал файл.

...