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

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

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

Как я могу это достичь?

Ответ 1

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

  • Используйте поддержку augeas в марионетке (вам понадобятся библиотеки 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 анализирует файл и использует его для разработки путей, которые вам нужны.

  • Вы можете использовать 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, поэтому добавление переменной, которая еще не потребовала дополнительных усилий. Это сделает неправильную вещь, если переменная появляется в нескольких разделах (но примеры, на которые я смотрю, имеют все уникальные имена переменных). Это должно работать для переменной, которая присутствует, но закомментирована с помощью двоеточия.

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

Ответ 2

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

Чем меньше изменений вы вносите в 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",
}

Ответ 3

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

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

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

Ответ 4

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

Например:

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

  php_value upload_max_filesize 10M

</VirtualHost>

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