Как передать параметр для Exec из уведомлений?

У меня есть следующий манифест Puppet:

# PHP Configuration
class php {

  exec { "php5enmod $module":
    path => "/usr/sbin",
    command => "php5enmod $module",
  }

  file {'/etc/php5/conf.d/upload_limits.ini':
    ensure => present,
    owner => root, group => root, mode => 444,
    notify => [ Exec["php5enmod upload_limits"], Service["apache2"] ],
    content => "post_max_size = 16M \nupload_max_filesize = 16M \n",
  }
  file {'/etc/php5/conf.d/memory_limits.ini':
    ensure => present,
    owner => root, group => root, mode => 444,
    notify => [ Exec["php5enmod memory_limits"], Service["apache2"] ],
    content => "memory_limit = 256M \n",
  }
}
include php

Как я могу создать exec использовать в notify путем передачи параметра динамически? Это то, что возможно, или есть другой лучший способ сделать это?


Текущий код дает мне ошибки, такие как:

Ошибка: не удалось найти зависимый Exec[php5enmod upload_limits] для файла [/etc/php5/conf.d/upload_limits.ini]

2 ответа

Решение

Когда это работает exec сначала объявляется.
В этот момент $module не установлен, поэтому заголовок exec php5enmod,
Вы не передаете здесь переменную, это просто имя.

В таком случае определенный тип имеет больше смысла.
Как это:

define php5enmod() {
  exec { "php5enmod_${title}":
    path        => "/usr/sbin",
    command     => "php5enmod $title",
    refreshonly => true,
    notify      => Service["apache2"]
  }
}

class php {

  php5enmod{ 'upload_limits': }
  file {'/etc/php5/conf.d/upload_limits.ini':
    ensure  => present,
    owner   => 'root',
    group   => 'root',
    mode    => '0444',
    content => "post_max_size = 16M \nupload_max_filesize = 16M \n",
    notify  => Php5enmod["upload_limits"],
  }

  php5enmod{ 'memory_limits': }
  file {'/etc/php5/conf.d/memory_limits.ini':
    ensure  => present,
    owner   => 'root',
    group   => 'root',
    mode    => '0444',
    content => "memory_limit = 256M \n",
    notify  => Php5enmod["memory_limits"],
  }

}

include php

Обычно define не должно быть там.
Наверное должно быть php::php5enmod() и иметь свой собственный файл.
Это просто чтобы показать общую концепцию.

Поменяйте мышление! использование Subscribe связать ваш с переменным именем Exec (плохая форма, ИМХО) File, Subscribe and Notify бесплатны; они делают то же самое, но в разных направлениях.

Попробуйте что-нибудь подобное?

  exec { "php5enmod $module":
    path => "/usr/sbin",
    command => "php5enmod $module",
    subscribe => [File["/etc/php5/conf.d/upload_limits.ini"], File["/etc/php5/conf.d/memory_limits.ini"],
  }

  file {'/etc/php5/conf.d/upload_limits.ini':
    ensure => present,
    owner => root, group => root, mode => 444,
    notify => Service["apache2"]
    content => "post_max_size = 16M \nupload_max_filesize = 16M \n",
  }
  file {'/etc/php5/conf.d/memory_limits.ini':
    ensure => present,
    owner => root, group => root, mode => 444,
    notify => Service["apache2"]
    content => "memory_limit = 256M \n",
  }

Полностью непроверенный, но я думаю, что ты начнешь хотя бы...

Другие вопросы по тегам