Назад | Перейти на главную страницу

Есть ли что-то вроде марионетки или повара, которое может управлять зависимостями между хостами?

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, вы можете создать факт и развернуть его на своих марионеточных клиентах.