Existe algo como fantoche ou chef que pode gerenciar dependências entre hosts?

2

Chef / fantoche são ótimas ferramentas para gerenciar a configuração de hosts individuais, mas eles parecem cair um pouco quando uma configuração tem dependências entre hosts. Por exemplo, eu gostaria de ter uma configuração de servidor da Web que tenta iniciar um aplicativo, mas apenas se o banco de dados já tiver sido iniciado (em outro host). Existe alguma ferramenta semelhante que permite que as configurações sejam especificadas sobre quais hosts de extensão, ou existem alguns pedaços extras de chef ou fantoche que tornam isso possível?

    
por kdt 28.04.2011 / 15:40

2 respostas

2

Uma coisa que você poderia fazer seria exportar o recurso do aplicativo do host do banco de dados. Isso não garantiria que o banco de dados está sendo executado, mas, novamente, nada acontecerá. Afinal de contas, o banco de dados pode ser parado depois, e Puppet não saberia nada sobre isso até a próxima vez que for executado.

Parece algo assim:

node 'database' {
    service { 'mysql': ensure => running }
    @@apache2::app { 'myapp': 
        ensure => running,
        tag => 'appserver',
    }
}

node 'appserver' {
    Apache2::App <<| tag == "$hostname" |>>
}

Se você combinar isso com a sugestão de Davey , poderá vincular ainda mais o início do aplicativo a um teste do banco de dados :

    @@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',
        }
    }
    
por 03.05.2011 / 21:53
1

Eu acho que você poderia escrever um fato personalizado para o fantoche / facter para fazer isso. Aqui está uma explicação do site da puppetlabs:

link

Basicamente, se você pode escrever o teste em ruby, você pode criar um fato e implantá-lo em seus clientes de marionetes.

    
por 30.04.2011 / 16:14