Первое предложение: Установка и приблизительно обеспечение веб-сервера не состоит в том, что трудно, но содержание в чистоте это и безопасный является продолжающееся усилие. И чистка после того, как что-то разорится, может быть трудной. Существуют сервисы там, которые дешево сделают усилие для Вас.
Если Вы должны: необходимо прочитать документацию почтовой программы по Вашему выбору, я предложил бы, чтобы Вы выбрали почтовую программу по умолчанию для своей ОС. (Еще это - действительно вопрос вкуса: Sendmail является и самой полной функцией и закаленной почтовой программой, но может быть хитрым для установки; Постфикс легче, но также и очень мощен. И существует также QMail, Exim и несколько других.)
Удостоверьтесь, чтобы Вы сделали аутентификацию, использовали LMTP (Порт 587), и блок любое соединение от Вашего хоста до где угодно Порта 25, и Вы будете в порядке.
Во-первых, вам определенно следует использовать define
для httpd :: vhost :: package :: manage
, а не class
], так как он будет определен несколько раз для одного и того же узла.
notify {$ service_env:}
всегда будет мешать работе, поскольку $ service_env
- это dev
для обоих вызовов определите
. Вы не сможете повторно объявить один и тот же ресурс с тем же именем во второй раз.
Вы можете исправить это, переключившись на что-то вроде notify {"$ {service_env} - $ {port}":}
, но вы, вероятно, столкнетесь с другими проблемами, если он не был построен должным образом для обработки настройки как определенного типа.
Структура класса полностью переходит в httpd :: vhost :: package :: manage
странно - я ' Я рекомендую действительно сократить все до структуры классов, которая упростит работу и позволит вам иметь только необходимые ресурсы.
httpd (init.pp - have it include the install, config, service classes)
httpd::install (install.pp - have it define Package[httpd] to install)
httpd::service (service.pp - have it define Service[httpd]; the vhost defines can
notify this to update)
httpd::config (config.pp - any configuration, such as handling of httpd.conf,
that won't be per-vhost)
httpd::vhost (vhost.pp - the defined type that can be used multiple times. Have
it include httpd so that the base classes are handled, and
notify httpd::service from your vhost config file resources)
Простой пример управления виртуальным хостом на самом деле пример для определенных типов в документации - дайте мне знать, если вам понадобятся какие-либо другие разъяснения по поводу того, как сделать из этого красивую повторно используемую часть конфигурации!
Изменить:
Обновление для проблемы общих родительских каталогов.
Управление файлом из двух разных мест - это боль в Puppet, и раньше это доставляло мне проблемы. Особенно неприятно, когда нет конфликта между двумя объявлениями ресурсов, как в вашей текущей головоломке.
Вы правы, ресурс exec
, вероятно, ваш лучший ответ.
define app($app_primary, $app_sub) {
exec { "mkdir_${service_env}_${app_primary}_${app_sub}":
command => "/bin/mkdir -p /tmp/var/log/httpd/${service_env}/${app_primary}/${app_sub}",
creates => "/tmp/var/log/httpd/${service_env}/${app_primary}/${app_sub}",
require => Class["httpd::vhost::log::base"],
}
}
Это работает для обоих случаев (с и без подкаталога), потому что вы ' повторно установите $ app_sub
в пустую строку, если она не используется.
Я бы сказал, что, вероятно, будет намного проще просто не использовать дерево каталогов (используйте log / httpd / foo_sitea
в качестве каталога журнала вместо log / httpd / foo / sitea
), но это должно помочь. Разделение строки и разное поведение в зависимости от этого, и все эти отдельные определяют
, когда это действительно может просто жить в классе site
... не усложняйте!