Это звучит, как будто Вы хотите смочь внести много различных изменений в Ваших виртуальных гостях - пока Менеджер обновлений обработает сторону исправления/текущих исправлений/обновления вещей, я не думаю, что это ответит на Ваши запросы вокруг изменения другого системного Java файлов/обновления.
Не упущение, пока ESXI может быть свободным, VCenter, не, и это определенно походит на излишество для Ваших требований.
Если бы Вы хорошо работаете в vbscripting или powershell, я рассмотрел бы обработку чего-то с ними и автоматизирующий такой большой процесс, как Вы можете.
Создайте в extdata переменную, которая определяет, нужно ли отслеживать сервер. Вот пример включения мониторинга по умолчанию и его отключения для определенного сервера.
extdata / common.csv
use_monitoring,true
extdata / ephemeral.example.com.csv
use_monitoring,false
В вашем классе для каждой службы найдите, является ли мониторинг включен. Если это так, включите класс, ответственный за мониторинг этой службы. Это может выглядеть примерно так:
class apache {
# Manage your apache setup here
if extlookup("use_monitoring") == 'true' {
include monitoring::apache
}
}
class monitoring::apache {
# Manage your apache monitoring setup here
}
Обновление: Когда я впервые прочитал ваш вопрос, я подумал, что вы спрашиваете способ включить мониторинг на некоторых, но не на всех ваших серверах Apache. Если вы хотите отслеживать их все, вам даже не нужно возиться с extlookup. Просто разделите свой класс мониторинга на классы для конкретных служб и включите их в класс для службы.
В своем классе apache вы можете определить переменную, которую вы используете в тесте, чтобы увидеть, следует ли вам доставлять файл мониторинга или нет.
class apache {
$apacheconfigured = true;
}
class monitor {
if $apache::apacheconfigured {
file {'blah': ... }
}
}
Вам потребуются виртуальных ресурсов или настраиваемых фактов . Если конфигурация одного хоста изменит конфигурацию другого, вам потребуется экспортированных ресурсов . На самом деле у меня есть все это. Вот образец.
В классе мониторинга:
@file { '/path/to/apache/monitoring/conf':
ensure => file,
source => 'puppet:///modules/monitoring/apache.conf',
tag => 'apache-extras',
}
В классе Apache:
File <| tag == 'apache-extras' |>
Exec <| tag == 'apache-extras' |>
etc...
Объявите такой факт и поместите его в соответствующее место (см. Ссылку выше ):
# apache2.rb
Facter.add("apache2") do
setcode do
%x{/usr/bin/test -x /etc/init.d/apache2 && /bin/echo yes || /bin/echo no}.chomp
end
end
В классе мониторинга используйте:
if $apache2 == 'yes' {
# include configuration for apache
}
В классе Apache, включенном в сервер Apache:
@@exec { "config-web $fqdn":
tag => "monitoring-server",
}
В классе мониторинга, включенном в сервер мониторинга:
<<| tag == 'monitoring-server' |>>
Почему бы просто не require => Package ['apache']
на ресурсы в модуле мониторинга? Если в узел добавлены классы apache
и мониторинга
, файлы, зависящие от apache, будут установлены, если он установлен успешно. Если это не так (например, не удалось установить пакет или модуль apache не добавлен в узел, класс мониторинга просто не сработает).
Или, если вы не хотите, чтобы он завершился ошибкой, вы можете использовать что-то вроде следующего:
if defined(Package['apacge']) {
file {...}
<and so on>
}