Как установить config= значение в php.ini с Puppet?

Я делаю свои первые шаги в Puppet и столкнулся с проблемой. Я установил PHP на сервер Linux и хочу внести некоторые изменения в php.ini файл. Я не хочу перезаписывать весь ini файл с одним из репозитория, просто измените / создайте одно простое значение конфигурации.

Я хочу убедиться, что собственность upload_max_filesize в php.ini имеет значение 10M,

Как мне этого добиться?

4 ответа

Решение

Там в основном 3 варианта:

  1. Используйте поддержку augeas в puppet (вам понадобятся установленные библиотеки ruby ​​augeas), например:

    augeas { "php.ini":
      notify  => Service[httpd],
      require => Package[php],
      context => "/files/etc/php.ini/PHP",
      changes => [
        "set post_max_size 10M",
        "set upload_max_filesize 10M",
      ];
    }
    

    Вы можете использовать "augtool ls /files/etc/php.ini", чтобы увидеть разделы, чтобы понять, как augeas выполняет синтаксический анализ файла, и использовать его для определения необходимых вам путей.

  2. Вы можете использовать exec. Что-то вроде:

    define set_php_var($value) {
      exec { "sed -i 's/^;*[[:space:]]*$name[[:space:]]*=.*$/$name = $value/g' /etc/php.ini":
        unless  => "grep -xqe '$name[[:space:]]*=[[:space:]]*$value' -- /etc/php.ini",
        path    => "/bin:/usr/bin",
        require => Package[php],
        notify  => Service[httpd];
      }
    }
    set_php_var {
      "post_max_size":       value => '10M';
      "upload_max_filesize": value => '10M';
    }
    

    К сожалению, это решение не понимает разделы в php.ini, поэтому добавление переменной, которой там еще нет, потребует дополнительных усилий. Это будет неправильно, если переменная появится в нескольких разделах (но примеры, на которые я смотрю, имеют все уникальные имена переменных). Это должно работать для переменной, которая присутствует, но закомментирована с точкой с запятой.

  3. Скопируйте оригинальный файл php.ini в ваш репозиторий Puppet и используйте файл с source => 'puppet:///...' или же content => template(...) полностью заменить файл, как вы указали, вы бы предпочли не делать.

Мой предпочтительный вариант - оставить php.ini в покое, и пусть puppet создаст файл в каталоге conf.d в php, чтобы переопределить значения, которые вы хотите изменить.

Чем меньше изменений вы вносите в php.ini, тем легче видеть, что происходит, когда вам необходимо объединить свои изменения с изменениями поставщиков пакетов при обновлении php.ini в будущем.

file {'/etc/php5/conf.d/upload_limits.conf':
  ensure => present,
  owner => root, group => root, mode => 444,
  content => "post_max_size = 10M \nupload_max_filesize = 10M \n",
}

Вы также можете использовать ресурс file_line, находящийся в модуле stdlib.

file_line{ 'php_upload_max_filesize':
  path => '/path/to/php.ini',
  line => "upload_max_filesize = 10M",
}

Так как это добавит строку к файлу, если тот, который точно соответствует ему, не существует, и поскольку последний экземпляр значения конфигурации имеет приоритет над предыдущими в файле, он будет работать. Вот как я это делаю, когда у меня есть только пара вещей, чтобы измениться.

Альтернативный подход, если вы используете Apache в качестве веб-сервера, - это установить переменную php в вашем файле виртуального хоста Apache (который, вероятно, будет где-то в вашем каталоге Puppet-манифестов).

Например:

<VirtualHost *:80>
  ServerName app.dev
  DocumentRoot /srv/app/public
  ## etc...

  php_value upload_max_filesize 10M

</VirtualHost>

Это на самом деле не меняет php.ini, но - в зависимости от вашей настройки - может быть простым способом достижения того же эффекта.

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