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

Как передать параметр для 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]

Когда это работает 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",
  }

Совершенно непроверенный, но я думаю, что это поможет вам по крайней мере ...