- Sistema Operacional suportado pelo Ansible (Linux ou Mac OS - no documento é usado o Ubuntu 20.04 via Windows Subsystem for Linux - WSL)
- Conta no Google Cloud e projeto criado no Compute Engine - https://console.cloud.google.com
- Conta na Cloudflare para DDNS - https://cloudflare.com/ - Opcional
sudo apt-get install apt-transport-https ca-certificates gnupg
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
sudo apt-get update && sudo apt-get install google-cloud-sdk git
gcloud init
# Caso não tenha uma chave já criada
ssh-keygen -t rsa
# Criar arquivo com as chaves já existentes
gcloud compute project-info describe | grep ssh-rsa > ~/google-cloud-ssh.txt
# Editar o arquivo e incluir no fim a chave desejada
echo `whoami`':'`cat ~/.ssh/id_rsa.pub` >> ~/google-cloud-ssh.txt
# Importar o arquivo criado
gcloud compute project-info add-metadata --metadata-from-file ssh-keys="${HOME}/google-cloud-ssh.txt"
-
Caso você tenha um domínio e uma conta na Cloudflare, é possível gerar um token de API, usando o template "Edit Zone DNS", a fim de fazer a atualização do registro de DNS da máquina para o IP Externo.
As variáveis abaixo devem ser definidas no arquivo vars.yml:
cloudflare_email: <seu email cadastrado na cloudflare> cloudflare_token: <API TOKEN> cloudflare_zone: <exemplo: whatever.com> cloudflare_record: <exemplo: vm01.gcp.whatever.com>
sudo apt install software-properties-common
sudo apt update
sudo add-apt-repository ppa:ansible/ansible
sudo apt update
sudo apt install -y ansible python3-requests python3-google-auth openssh-client
-
Menu Principal -> IAM & Admin -> Service Accounts
-
Create Service Account
-
Criar a conta de acordo com as imagens abaixo
-
Clicar na conta criada e ir em Keys -> Add Key -> Create New Key
-
O arquivo .json deve ser baixado e armazenado em local seguro
cat > ~/.vimrc <<'ENDEND'
filetype indent off
set tabstop=2 shiftwidth=2 expandtab
set cursorcolumn cursorline
ENDEND
# Criar pasta do projeto
cd ~
git clone https://github.com/lucaslellis/gcp_laboratorio_kvm.git
cd ~/gcp_laboratorio_kvm
cp inventory.gcp.yml.template inventory.gcp.yml
cp vars.yml.template vars.yml
vi inventory.gcp.yml
vi vars.yml
# Verificar que o arquivo de configuração correto está sendo usado:
ansible --version | grep config
# Exemplo:
lucas@<...>:~/gcp_laboratorio_kvm$ ansible --version | grep config
config file = /home/lucas/gcp_laboratorio_kvm/ansible.cfg
configured module search path = ['/home/lucas/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
lucas@<...>:~/gcp_laboratorio_kvm$ ansible --version | grep 'config file'
config file = /home/lucas/gcp_laboratorio_kvm/ansible.cfg
lucas@<...>:~/gcp_laboratorio_kvm$ ansible-config dump --changed-only
INVENTORY_ENABLED(/home/lucas/gcp_laboratorio_kvm/ansible.cfg) = ['gcp_compute']
# Verificar inventário (a senha solicitada será a mesma definida na criptografia):
ansible-inventory --ask-vault-pass inventory.gcp.yml --list
ansible-playbook --ask-vault-pass -i inventory.gcp.yml vm01.yml
gcloud compute ssh vm01 -- -L5901:localhost:5901
A opção "-- -L5901:localhost:5901"
faz o tunelamento da porta do VNC.
vncpasswd
sudo systemctl start vncserver@:1.service
Resultado esperado:
Caso apareçam pop-ups de warning ou erro "XFCE Policy Kit", favor ignorar.
cd ~/vagrant/linux00
vagrant up
# Aguardar subida da máquina
vagrant ssh
# Desligar
gcloud compute instances stop vm01
# Ligar
gcloud compute instances start vm01
# Colocar para hibernar
gcloud compute instances suspend vm01
# Ligar novamente a partir da hibernacao
gcloud compute instances resume vm01
ansible-playbook --ask-vault-pass -i inventory.gcp.yml vm01-destroy.yml