Skip to content

wellsud/packer-templates-vsphere

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Repositório de Templates Vmware para Servidores Windows e Ubuntu

Imagens construídas com Hashicorp Packer para automatização da criação/atualização dos Templates Básicos (Golden Images) de servidores Windows Server 2019 e Ubuntu 20.04

Cenário

  • Ambiente de Virtualização VMware Vsphere 6.5: Com ESXi 6.5 como hipervisor nos hosts com aramzenamento via SAN. Vcenter 6.5

  • Recriação automática dos Templates Windows para atualização: Os templates deveriam estar com as últimas atualizações do Windows Update para agilizar a resposta dos tickets. Foi definido que os templates deveriam atualizar pelo menos ao mês após o Patch Tuesday da Microsoft.

  • IP estático: Nosso ambiente funciona com ip estático e com restrição de saída para internet somente para máquinas que estejam no dominio e/ou autenticadas por usuário do dominio.

  • Experiência da Equipe de Infra com o uso de Git: É o primeiro contato da maioria da equipe com git e ferramentas de Infraestrutura como Código então o processo para a customização e construção do template deveria ser a mais simples possível. Todos os arquivos e variáveis essenciais para nosso cenário foram documentadas aqui.

Requisitos desse guia

  • Subsistema do Windows para Linux (WSL). Ou sistema operacional Linux. Apesar de ser possível usar Windows com o Hashicorp Packer. a possibilidade de se chamar a tarefa agendada usando cron, python e packer foi mais simples de implementar usando Linux. A versão testada foi Ubuntu 18.04 ou superior.
  • Packer versão 1.7 ou superior. Instruções para instalar o Packer aqui
  • É necessário já possuir uma iso do Windows Server 2019 carregado em algum armazzenamento acessivel ao vcenter.

Como utilizar esse repositório

Conhecendo a Estrutura de Arquivos

.
.
├── LICENSE
├── README.md
├── builds
│   ├── Linux
│   │   └── Ubuntu2004
│   │       ├── http
│   │       │   ├── meta-data
│   │       │   └── user-data.pkrtpl.hcl
│   │       ├── scripts
│   │       │   └── update _and_clean_server.sh
│   │       ├── ubuntu2004-server.auto.pkrvars.hcl
│   │       ├── ubuntu2004-server.pkr.hcl
│   │       └── variables.pkr.hcl
│   └── Windows
│       └── WindowsServer2019
│           ├── Core
│           │   └── Standard
│           │       ├── autounattend.pkrtpl.hcl
│           │       ├── scripts
│           │       │   ├── enable-winrm.ps1
│           │       │   ├── network.ps1
│           │       │   └── vmtools.cmd
│           │       ├── variables.pkr.hcl
│           │       ├── winsrv2019core.auto.pkrvars.hcl
│           │       ├── winsrv2019core.auto.pkrvars.hcl.template
│           │       └── winsrv2019core.pkr.hcl
│           └── GUI
│               └── Standard
│                   ├── autounattend.pkrtpl.hcl
│                   ├── scripts
│                   │   ├── enable-winrm.ps1
│                   │   ├── network.ps1
│                   │   └── vmtools.cmd
│                   ├── variables.pkr.hcl
│                   ├── winsrv2019std.auto.pkrvars.hcl
│                   ├── winsrv2019std.auto.pkrvars.hcl.template
│                   └── winsrv2019std.pkr.hcl
└── tasks
    ├── run_Win_Srv_2019_Core_task.py
    └── run_Win_Srv_2019_GUI_task.py

A pasta builds contém os scripts de criação separados por versão de sistema Operacional. Tomemos como exemplo a imagem do Windows Server 2019 Standar. Para criar um template vmware dessa versão é necessário acessar a pasta builds\Windows\WindowsServer2019\Core\Standard. Dentro da pasta da Imagem os seguintes arquivos são encontrados:

Para as imagens Windows

autounattend.pkrtpl.hcl: Template para o arquivo de respostas automaticas da instalação (Somente Windows).

scripts: diretório onde ficaram os scripts de configuração e personalização pós instalação. Qualquer futura personalização via script deve ser feita adicionando ou editando scripts aqui. Devido as nossas restrições e necessidades os scripts de configuração do ip estático são mandatórios

variables.pkr.hcl: Arquivo que define quais são as variáveis personalizaveis do template da Imagem. Não alterar a meno que novas variáveis precisem ser criadas. Há uma gama muito maior de personalizações, porém as definidas atendem as necessidades do nosso dia-a-dia

winsrv2019core.auto.pkrvars.hcl.template: Modelo para o arquivo que passará as variáveis que iremos alimentar. Para a execução da automação é recomendado fazer uma cópia dele renomeando para winsrv2019core.auto.pkrvars.hcl. Depois de renomeá-lo é só preencher os valores das variáveis com os valores correspondentes desejados. Obs.: Esse arquivo está incluido no gitignore para evitar o commit de dados sensíveis

winsrv2019core.pkr.hcl: Arquivo responsável pela criação do Template Vmware.

Para as Imagem Linux

A partir da versão 20.04 do Ubuntu Server o sistema de instalação padrão é o Subiquity que, por sua vez, usa curtin e cloud-init para provisionar uma imagem e fazer a instalação automática. O cloud-init necessita de pelo menos dois arquivos:

user-data.pkrtpl.hcl: Similar ao autounattend do Windows é um arquivo que contem as informações de customização de atualização. Esse arquivo contém as váriaveis básicas necessárias ao ambiente da empresa. Referência aqui.

meta-data: Arquivo que contém meta dados do distribuidor da imagem da nuvem que será instalado. No nosso caso ficará em branco.

Criação da Imagem - Passos

1 - Dentro de ua instalação linux do WSL, clonar o repositório git em sua máquina com o comando
git clone [email protected]:iptsp/imagens_servidores.git

2 - Acessar a pasta do template que deseja criar.

3 - Executar o comando abaixo que instala as dependências que o packer precisa para criar o template. Apenas a primeira vez
packer init .
4 - Para executar manualmente, ainda dentro da pasta digite:
packer build .

Obs.: o ponto é necessário e informa que os arquivos para a construção estão na pasta atual

Execução agendada

Também é possível agendar via cron (recomendado) para que se execute automaticamente as tarefas de atualização. O script de execucção está programada para executar 1 vez por mês em um determinado dia da semana. Por padrão a segunda quinta-feira do mês. Para personalizá-lo e agendá-lo faça o seguinte:

1 - Após o clone do repositório acesse a pasta tasks e edite o arquivo da versão que de Image que deseja atualizar. Exemplo: Para a versão Windows_Server_Core_2019_Standard o arquivo é run_Win_Srv_2019_Core_task.py 2 - Altere somente as duas linhas marcadas com comentário inserindo o dia da semana e a semana do mês e salve o arquivo. 3 - No linux digite: crontab -e 4 - Para executar a tarefa agendada todos os dias às 15h30 insira a seguinte linha no arquivo: 30 15 * * * python3 /home/wellsud/imagens_servidores/tasks/run_Win_Srv_2019_Core_task.py A sintaxe é mm hh dia mes diasemana commando

desafios e abordagem escolhida

  • A versão 6.5 apresenta um problema durante a customização da interface de rede no Ubuntu 20.04 devido a uma falha na execução de serviço do systemd durante o boot conforme descrito aqui. Esse erro só é corrigido a partir da versão 6.7. E apesar do KB a solução não resolveu nosso problema. Para contornar a situação foi necessário alterar a informação do arquivo issue mudando a versão de 20.04 para 18.04 conforme esta sugestão. A solução foi incluida no script de customização "update_and_clean_server.sh" nas linhas 103 e 104.

  • Outro problema observado é que após personalizar o ip de uma maquina virtual criada a partir do template a mesma subia com dois ip's na interface e dois arquivos criados dentro de /etc/netapplyls /etc/netplan. Enxergando o ip original do template como default e não o novo ip configurado. Para contornar este problema foi necessário remover o arquivo yaml da pasta do netplan ao fim da configuração. Quando a máquina virtual é criada, um novo arquivo com a configuração customizada é criaod para o netplan.

  • Para facilitar o agendamento para um dia especifico da semana dentro do mês foi criado um script em python que é chamado pela tarefa agendada.

  • Nas maquinas Windows em nosso ambiente foi necessário fixar um IP interno para os templates para que a exceção fosse aberta no Proxy e no Firewall para contornar a restrição de saida para internet. Para a atualização após instalação fo usado o provisoner windows-update do packer

Observações Importantes

Atenção para não subir arquivos com informações sensíveis (senhas e dados de usuário) para o repositório. Quaisquer arquivos do tipo devem ser incluídos no .gitignore.

Caso use o script de agentamento no cron via wsl o serviço deve ser iniciado manualmente, pois não é iniciado por padrão no wsl.