是否有像 puppet 或 chef 之类的东西可以管理跨主机的依赖关系?

是否有像 puppet 或 chef 之类的东西可以管理跨主机的依赖关系?

Chef/puppet 是管理单个主机配置的绝佳工具,但当配置在主机之间具有依赖关系时,它们似乎会略有不足。例如,我希望有一个 Web 服务器配置尝试启动应用程序,但前提是数据库已经启动(在另一台主机上)。是否有一些类似的工具允许指定跨主机的配置,或者是否有一些额外的 chef 或 puppet 功能可以实现这一点?

答案1

您可以做的一件事是从数据库主机导出应用程序资源。它不会保证数据库正在运行,但话又说回来,什么也不会发生。毕竟,数据库之后可能会停止,而 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',
        }
    }

答案2

我认为您可以为 puppet/facter 编写一个自定义事实来执行此操作。以下是来自 puppetlabs 网站的解释:

http://projects.puppetlabs.com/projects/1/wiki/Adding_Facts

基本上,如果您可以用 ruby​​ 编写测试,那么您就可以创建一个事实并将其部署到您的 puppet 客户端。

相关内容