Nesta postagem irei mostrar como fazer o startup e shutdown de VMs no OCI via script python. Isso é muito útil para cenários onde você precisa desligar e iniciar VM para fazer alguma manutenção e não quer ter que fazer login na console do OCI. Também é muito prático para fazer o agendamento de shutdown e startup de máquinas virtuais no OCI. Então, sem mais enrolação vamos ao que interessa. Abaixo apresento o código comentado por partes e no final da postagem deixo o script na integra.
A primeira parte do script é onde importo as bibliotecas que serão usadas no script.
import oci
import smtplib
import os
import datetime
import sys
import time
Nessa versão do script estou programando uma interação com o usuário para que o mesmo informe a ação desejada sobre a instância. Nesse caso três ações são possíveis [STOP | START| X]
. Enquanto o usuário informar um valor diferente das opções disponíveis o loop vai repetir o questionamento sobre a ação desejada.
Caso [stop]
(case insensitivo) seja digitado a VM será desligada.
Caso [start]
(case insensitivo) seja digitado a VM será iniciada.
Caso [X]
(case insensitivo) seja digitado o loop é finalizado e o script encerrado.
action = '0'
while action != "STOP" and action != "START" and action != "X":
print('ACTION:')
action = str(input()).upper()
if action == "X":
sys.exit()
Na linha abaixo informo o OCID da instância a ser desligada ou ligada. Neste exemplo passo o valor de forma fixa no script, mas pode também ser passado como um parâmetro na chamado do script.
instance_id='ocid1.instance.oc1.sa-saopaulo-1.fd....ljrxoczzwycde....ahv5zt2mcxzybma....ol99d'
Abaixo estou fazendo uso do profile default definido no arquivo config no diretório default de instalação do oci cli. Na sequência é instanciado um objeto do tipo ComputeClient
config = oci.config.from_file(profile_name="DEFAULT")
core_client = oci.core.ComputeClient(config=config)
Neste ponto já definimos a ação a ser executada, a instância que receberá a ação e fizemos também a autenticação na API. Agora estamos prontos para executar a ação sobre a VM. Usamos os métodos do objeto ComputeClient
instanciado na etapa anterior para manipular nossa VM.
Na linha abaixo, chamo o método instance_action()
passando a VM alvo e a ação a ser executada sobre a VM
instance_action_response = core_client.instance_action(instance_id=instance_id,action=action)
A ação executado na etapa anterior retorna algumas informações. Nas linhas abaixo estou recuperando essas informações para imprimir na console. Após imprimir as informações sobre a ação executada na VM, o script aguar 5 segundos time.sleep(5)
e é finalizado.
display_name = instance_action_response.data.display_name
lifecicle_state = instance_action_response.data.lifecycle_state
shape = instance_action_response.data.shape
region = instance_action_response.data.region
horario = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
print(display_name)
print(lifecicle_state)
print(horario)
time.sleep(5)
Segue o código na integra.
import oci
import smtplib
import os
import datetime
import sys
import time
action = '0'
while action != "STOP" and action != "START" and action != "X":
print('ACTION:')
action = str(input()).upper()
if action == "X":
sys.exit()
instance_id='ocid1.instance.oc1.sa-saopaulo-1.fd....ljrxoczzwycde....ahv5zt2mcxzybma....ol99d'
config = oci.config.from_file(profile_name="DEFAULT")
core_client = oci.core.ComputeClient(config=config)
instance_action_response = core_client.instance_action(instance_id=instance_id,action=action)
display_name = instance_action_response.data.display_name
lifecicle_state = instance_action_response.data.lifecycle_state
shape = instance_action_response.data.shape
region = instance_action_response.data.region
horario = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
print(display_name)
print(lifecicle_state)
print(horario)
time.sleep(5)
0 Comentários