Uma versão prática deste exemplo pode ser encontrada no Gitlab:
🔗 https://gitlab.com/juliohm1978/cloud-init-example
Documentação do cloud-init: 🔗 https://cloudinit.readthedocs.io/en/latest/
Pré requisitos
Download do ubuntu-cloud
Na página de releases oficiais do Ubuntu Cloud, encontre a imagem do tipo OVA.
🔗 https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.ova
Importar a imagem para o VirtualBox
No VirtualBox, clique no botão de importação.
Selecione a imagem OVA que vocẽ baixou.
Alguns parâmetros da VM podem ser alterados neste momento. Não se esqueça de escolher no Mac Address Policy: Generate new MAC address for all network adapters.
Configurar a porta serial do console
Devido a um problema na configuração desta imagem, ela não consegue iniciar sem a existência de uma porta serial para o console principal.
Sem a portal serial, a imagem trava durante o boot e não responde. Para contornar o problema, configure a porta serial enviando seu conteúdo para qualquer arquivo temporário — ex: /tmp/serial.log.
DICA: Você pode visualizar o conteúdo do console em outro terminal para ver informações detalhadas do boot do sistema operacional e a execução do cloud-init.
tail -F /tmp/serial.log
Prepare uma imagem ISO com as suas customizações
Instale as ferramentas do cloud-init.
sudo apt install cloud-image-utils
Crie os arquivos meta-data.yaml, network-config.yaml e user-data.yaml.
meta-data.yaml
dsmode: local
network-config.yaml
version: 2 ethernets: enp0s3: dhcp4: true
user-data.yaml
#cloud-config system_info: default_user: name: user gecos: user groups: [wheel, adm] sudo: ["ALL=(ALL:ALL) ALL"] shell: /bin/bash password: user ssh_pwauth: true chpasswd: expire: false
Crie a imagem iso usando o comando cloud-localds.
cloud-localds -v cloud-init.iso --network-config=network-config.yaml user-data.yaml meta-data.yaml
Anexar a ISO à VM
Nas configurações da VM, adicione uma unidade cdrom na controladora IDE.
Adicione e escolha a ISO que você acabou de criar.
Configure as placas de rede da VM
Para este teste simplificado, configure apenas uma placa de rede com NAT.
Faça um snapshot da VM zerada
Antes de iniciar qualquer atividade, faça um snapshot da VM neste momento.
É importante fazer o snapshot ANTES do primeiro boot. Assim vocẽ poderá retornar ao ponto de partida para realizar testes com diferentes configurações no user-data.
Iniciar a VM
Faça o boot da imagem e confira no /tmp/serial.log o resultado. Mensagens do cloud-init devem aparecer durante o andamento.
Ao final, você poderá entrar na VM com usuário user e senha user.
Customize ainda mais
Volte o snapshot inicial quantas vezes quiser para testar configurações mais avançadas.
❗LEMBRE-SE❗: Sempre que modificar os arquivos Yaml (user-data, network-config ou meta-data) é preciso recriar a imagem ISO.
Confira exemplos mais completos na documentação oficial.
🔗 https://cloudinit.readthedocs.io/en/latest/topics/examples.html
DICA: Para poder acessar a VM via SSH, será preciso adicionar outra placa de rede com Host-Only Network.