Vários recursos de fantoches que compartilham um único arquivo de configuração

5

Estou desenvolvendo um módulo personalizado de fantoches para gerenciar os JBoss Application Servers. Considero cada aplicativo implementado no appserver como um recurso independente. Mas alguns dos aplicativos precisam de alterações de configuração dedicadas no arquivo de configuração do JBoss.

Cada aplicativo também é um recurso de marionete, mas a maioria dos aplicativos não se conhece.

No momento, realizo alterações no arquivo de configuração do JBoss usando o augeas. Isso funciona mesmo se muitos recursos exigirem alterações nesse arquivo de configuração, mas é muito complicado, propenso a erros e lento.

Na verdade, eu quero usar templates para o arquivo de configuração, mas a questão é como eu posso agregar todos os artefatos necessários vindos de diferentes (sub) módulos antes de acionar o mecanismo de templates sem precisar saber como os artefatos de configuração do homem existem?

Exemplo:

define jboss_config($config) {
  # do something with the config
}

jboss_config {
  config => 'some configuration for app 1'
}
jboss_config {
  config => 'some configuration for app 2'
}    
jboss_config {
  config => 'some configuration for app 3'
}    
jboss_config {
  config => 'some configuration for app 4'
}    
jboss_config {
  config => 'some configuration for app 5'
}

#now, as all calls to "jboss_config" are done, 
#perform templating of the configuration file.

Como posso definir uma dependência que aciona o modelo uma vez após todas as chamadas de "jboss_config" serem feitas? Notificar não parece funcionar porque acionaria o modelo após cada etapa de configuração.

    
por roehrijn 31.05.2013 / 11:46

1 resposta

4

Minha abordagem para coisas como essa é usar o módulo concat , que cuidará de todas as notificações para construir o próprio arquivo de configuração e envolvê-lo nas definições de recursos específicas do aplicativo. O que quero dizer com essa última parte é algo assim:

class jboss {
  concat { '/path/to/jboss/config/file':
    owner => 'whoever',
    group => 'whoever',
    mode  => 'whatever',
  }
  concat::fragment { 'jboss header':
    target  => '/path/to/jboss/config/file',
    content => template('jboss/config.header.erb'),
    order   => 00,
  }
  concat::fragment { 'jboss footer':
    target  => '/path/to/jboss/config/file',
    content => template('jboss/config.footer.erb'),
    order   => 99,
  }
}
define jboss_config ($config) {
  concat::fragment { "jboss config ${title}":
    target  => '/path/to/jboss/config/file',
    content => template('jboss/config.item.erb'),
    # Alternately, if your needs are simple enough:
    #content => "${config}\n",
  }
}

Como você está envolvendo a concatenação de arquivos, os módulos do cliente não precisam saber sobre o mecanismo exato que você está usando para a configuração, e você pode adicionar parâmetros ao recurso conforme necessário para descrevê-lo de maneira natural. (isto é, não ter que escrever strings que correspondam à sintaxe do arquivo de configuração, mas especificando apenas os dados de configuração necessários.)

    
por 31.05.2013 / 15:00