Módulos / manifestos de nó cruzado (?) com o fantoche: como conseguir isso?

2

Eu tenho "jogado" (bem, brincadeira de criança) com bonecos por algumas semanas e não consigo descobrir como implementar um módulo cujo nome é um cliente; este módulo seria invocado como tal:

client { "client-name":
    "apache-node" => "name-of-apache-node",
    "tomcat-node" => "name-of-tomcat-node",
    "https" => true,
    # probably other parameters, and other nodes may be implied as well
}

e isso geraria automaticamente a configuração para todos os nós relevantes e distribuir a configuração.

Nota: Eu não desejo usar fontes externas (LDAP ou outras), apenas fantoche: Eu tenho bastante dificuldade com fantoches e considerarei isso somente quando eu tiver domínio suficiente (faça isso alguns meses, provavelmente. ..).

Nota 2: o fantoche é a versão 2.6.12, o facter é a versão 1.5.9.

É possível ou é um sonho?

    
por fge 12.01.2012 / 10:20

1 resposta

1

Claro, isso deve ser viável.

Primeiro, você precisaria incluí-lo em algum lugar que se aplique a ambos os nós, depois filtrar a configuração que precisa ser aplicada aos diferentes nós (provavelmente com uma grande declaração case ), ou então ter diferentes classes para o lado do tomcat do aplicativo e o lado do apache (provavelmente seria mais limpo).

Aqui está a abordagem que eu tomaria:

Configure um módulo de várias classes para seu aplicativo cliente:

modules
 -> client-app
     -> manifests
         -> apache.pp
         -> tomcat.pp

Configure as classes com a configuração de que você precisa:

class client-app::apache ($tomcatnodes = undef, $https = true) {
    package { 'apache2':
        ensure => present,
    }
    # ... etc etc
    # use a template file that utilizes the $tomcatnodes and $https
    # variables to set the config that you need
}

Em seguida, anexe-os aos seus nós:

node tomcatserver1 {
    class { 'client-app::tomcat':
        apachenode = 'apacheserver',
        https = true,
    }
}
node tomcatserver2 {
    class { 'client-app::tomcat':
        apachenode = 'apacheserver',
        https = true,
    }
}
node apacheserver {
    class { 'client-app::apache':
        tomcatnodes = [ 'tomcatserver1', 'tomcatserver2' ],
        https = true,
    }
}

Algumas outras leituras para você sobre essa implementação: consulte aqui e aqui .

    
por 12.01.2012 / 19:14

Tags