No momento, estou implantando um novo produto e me deparei com alguns problemas para estruturar meu Playbook e Funções. Eu tenho três soluções diferentes e espero obter algumas sugestões sobre qual caminho pode ser o melhor.
O produto é um aplicativo da web em um servidor Windows. As etapas a seguir são necessárias para implantar (alto nível):
- instalar javajdk
- instalar o tomcat
- instalar win_service
- configurar java regkes
- configurar o tomcat
- instalar webapp
- Começar serviço
Uso inventários estáticos para prod e encenação, grupos_vars, papéis (criados com a galáxia ansible), para que haja algum tipo de estrutura.
Solução 1
Coloque tudo em uma cartilha enorme. Isso não soa bem, mas tem a vantagem de que você conhece as variáveis de instalações anteriores, por exemplo, tomcat
precisa saber onde JAVA_HOME
está ... que estava com a javajdk
instalação, devido a mais de um java nas máquinas, não existe um ambiente global JAVA_HOME
...
Solução 2
Divida tudo em papéis pequenos. Parece ótimo, mas os papéis devem ser independentes um do outro. Não encontrei um método para dissociar tarefas. Faria sentido ter papéis únicos para install_tomcat
, por exemplo , config_tomcat
e criar um manual que possua os papéis mencionados em sequência?
Mas como uma função conhece, por exemplo, um nome de caminho que é necessário na próxima função. -> A instalação define o caminho, a configuração precisa saber .. Eu realmente não tenho certeza para tornar as funções independentes.
Solução 3
Tipo de solução 2. Tenha um manual principal que contenha apenas funções, divida o máximo possível em funções. Ter nomes de variáveis independentes em./roles/vars/main.yml
De alguma forma (?), Encontre um lugar mais alto na variável precedência com o manual onde todas as var
definições necessárias vão. Internamente, direcione uma variável para a função ou simplesmente substitua uma variável de função.
Por exemplo, um produto tem um serviço, o nome do serviço geralmente faz parte de um nome de caminho tomcat
. O tomcat
nome não deve depender do serviço; portanto, deve haver um tomcat_install_path
na função, mas também um service_name
no produto. Portanto, caso o manual do produto seja chamado de nome do serviço faça parte do nome, ele tomcat_install
é chamado com uma implantação totalmente diferente, não deve haver mexer no nome do serviço.
Eu iria com a solução 3, mas ainda não encontrei uma maneira de configurá-lo. Qual é a opinião dos especialistas, a solução 3 é factível, é uma das outras uma vez melhor ou existe uma quarta solução?