OCI - Shutdown e startup de VM com script python



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)

Postar um comentário

0 Comentários