Chef / puppet - отличные инструменты для управления конфигурацией отдельных хостов, но они, кажется, немного уступают, когда конфигурация имеет зависимости между хостами. Например, я хотел бы иметь конфигурацию веб-сервера, которая пытается запустить приложение, но только если база данных уже запущена (на другом хосте). Есть ли какой-нибудь аналогичный инструмент, который позволяет указывать конфигурации, охватывающие хосты, или есть дополнительные кусочки шеф-повара или марионетки, которые делают это возможным?
Вы могли бы экспортировать ресурс приложения с хоста базы данных. Не было бы гарантия база данных работает, но опять же ничего не будет. В конце концов, база данных может быть остановлена после этого, и Puppet ничего не узнает о ней до следующего запуска.
В любом случае это будет выглядеть примерно так:
node 'database' {
service { 'mysql': ensure => running }
@@apache2::app { 'myapp':
ensure => running,
tag => 'appserver',
}
}
node 'appserver' {
Apache2::App <<| tag == "$hostname" |>>
}
Если вы объедините это с Дэйвипредложения, вы можете дополнительно связать запуск приложения с тестом базы данных:
@@apache2::app { 'myapp':
ensure => running,
dbtest => "$fqdn user database --password=12345",
tag => 'appserver',
}
define apache2::app(ensure = running, dbtest = '') {
service { 'apache2':
ensure => $ensure
require => $dbtest ? {
'' => undef,
default => Exec['test database'],
},
},
exec { "mysqlaccess $dbtest":
alias => 'test database',
}
}
Я думаю, вы могли бы написать собственный факт для марионетки / фактера, чтобы это сделать. Вот объяснение с сайта puppetlabs:
http://projects.puppetlabs.com/projects/1/wiki/Adding_Facts
По сути, если вы можете написать тест на Ruby, вы можете создать факт и развернуть его на своих марионеточных клиентах.