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

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

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

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


person mibutec    schedule 29.05.2012    source источник
comment
В качестве обновления, похоже, что puppet теперь включает или имеет нечто, называемое augeas, которое специально разработано для такого рода вещей. Я на самом деле не использовал его сам, поэтому не уверен, насколько легко с ним работать.   -  person Lee Lowder    schedule 21.06.2012


Ответы (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. Вы можете использовать исполняемый файл. Что-то типа:

    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(...), чтобы полностью заменить файл, как вы указали, что не хотите этого делать.
person freiheit    schedule 31.05.2012
comment
В Puppetforge слишком много ссылок для augeas, теперь важно, какую из них использовать, также я использовал это forge.puppetlabs.com/camptocamp/augeas @freiheit - person Ankur Verma; 12.03.2014
comment
@ankurverma: этот конкретный кукольный модуль добьется цели. Однако на самом деле я имел в виду не модуль puppet, а библиотеку ruby. В зависимости от вашей системы, пакет с именем вроде ruby-augeas, rubygem-ruby-augeas или libaugeas-ruby. Модуль puppet, который вы нашли на rubyforge, по-видимому, правильно их устанавливает, поэтому, если вы включите его в основные и клиентские конфигурации, он будет работать. - person freiheit; 12.03.2014
comment
Я установил упомянутый модуль и пытаюсь использовать augeas, как в этом файле: db.tt/CZMgwmuF Пожалуйста посмотрите на это и затените немного света, поскольку я не понимаю, почему это не работает, также в моем тестовом узле Файловый ресурс выполняется, но Augeas нет, еще одна вещь заключается в том, что, поскольку Augeas не работает, я не получаю обновленную конфигурацию файл. - person Ankur Verma; 13.03.2014
comment
@ankurverma: Вам действительно стоит задать новый вопрос. То, что вы делаете в этом примере, не сработает, потому что вы говорите марионетке делать две конфликтующие вещи с одним и тем же файлом. - person freiheit; 13.03.2014

Мой предпочтительный вариант — оставить php.ini в покое и заставить puppet создать файл в каталоге 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",
}
person mc0e    schedule 24.08.2012
comment
Это очень хороший и чистый подход, мне нравится! - person jeromegamez; 21.02.2013
comment
Хотя этот подход не является независимым от ОС. - person Jimmy Kane; 16.01.2014
comment
@JimmyKane, о каких ОС вы думаете? - person Xeoncross; 05.06.2014
comment
@Xeoncross Неправильный комментарий ранее. Вероятно, правильно в ОС. Был сосредоточен на другой проблеме. Спасибо за упоминание - person Jimmy Kane; 05.06.2014
comment
В Debian/Ubuntu вы должны вызвать файл upload_limits.ini, а затем включить его php5enmod upload_limits. - person kenorb; 17.04.2015
comment
Мне пришлось использовать расширение файла ini для файла, но в остальном это сработало для меня отлично! - person fredrikekelund; 13.04.2016

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

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

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

person ryanneufeld    schedule 06.02.2013
comment
Можно также использовать параметр match для file_line, чтобы убедиться, что существует только одна строка upload_max_filesize=.... См. документацию. - person Mifeet; 13.07.2015

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

Например:

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

  php_value upload_max_filesize 10M

</VirtualHost>

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

person Nick F    schedule 01.04.2014
comment
Идеально подходит для использования с puppet и puppetlabs-apache (который не поддерживает прямую настройку PHP) - person Pedro Adame Vergara; 15.02.2017