Como gerencio nós fantoches com diferentes versões de módulo?

1

Eu tenho uma configuração onde gostaríamos de ter o fantoche gerenciando a instalação e a configuração do nosso software em vários servidores, mas poder instalar diferentes versões do software em diferentes servidores.

Por exemplo, eu quero ser capaz de criar um módulo de fantoches que contém a configuração do servidor, dependências, etc para a nossa versão 1.0 e outra separada para a versão 1.1. A partir de uma única instalação mestre de marionetes, gostaria de poder configurar alguns nós para executar a versão 1.0 e outros nós para executar o 1.1.

Eu vejo que os módulos permitem metadados incluindo uma versão, mas parece que você pode ter apenas uma versão de um módulo instalado em um mestre de marionetes de cada vez.

Idealmente, seria baseado em grupos, onde poderíamos definir um grupo de "early adopter" e um grupo "normal" e, à medida que surgissem novas versões, poderíamos definir o grupo adotante inicial para usar a nova versão e o grupo normal. para usar o próximo mais antigo.

Qual é a melhor maneira de gerenciar isso?

    
por Nathan Voxland 10.05.2013 / 17:46

2 respostas

1

Existem várias maneiras pelas quais meus favoritos são os seguintes:

  • Para nossa migração do apache1 para o apache2, criamos módulos completamente separados. Você acha que isso causou muita duplicação, mas nós refizemos nossa configuração ao mesmo tempo.
  • Para atualizações simples de pacotes únicos, fazemos coisas como

    package{"foo":
        ensure => $wants_foo_upgrade ? {
            true => latest,
            false => 1.0
        }
    }
    

    em que $wants_foo_upgrade é baseado em nosso banco de dados de infraestrutura, dados ou fatos de previsão

  • Para as coisas no meio, tomamos a segunda abordagem e usamos essa variável para determinar quais arquivos de configuração usar ou em modelos para arquivos de configuração.
por 10.05.2013 / 17:51
1

Eu recomendaria fazer isso com um único módulo que tenha um número de versão como parâmetro, algo assim:

class our_software ($version) {
  ...
}

O que você faz dentro dessa classe depende do quanto as duas versões do seu software têm em comum. Você pode ter todos os arquivos de configuração incluídos diretamente na classe com modelos que selecionam os valores corretos para suas configurações com base no número da versão ou você pode ter duas classes separadas que configuram o ambiente de cada versão de forma totalmente diferente, com o principal classe decidir qual incluir com base no número da versão.

Se você estiver usando hiera (ou alguma outra coisa de pesquisa externa), isso permite que você especifique a versão do software desejado completamente separadamente do código que diz "instalar o nosso software".

Se você quiser se interessar, o módulo pode incluir um fato para indicar qual versão do software está atualmente instalada, para que seu módulo possa proibir coisas como os downgrades de versão (supondo que isso seja uma coisa apropriada em seu ambiente).

    
por 13.05.2013 / 15:05

Tags