Como customizar uma imagem ubuntu-cloud usando o cloud-init no VirtualBox

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/

  • 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.

    Launch Pad Bug #1573095

    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.