Este proyecto es un SDK para la API CloudIQ de Crayon que se puede usar en scripts y aplicaciones de Python. Proporciona una interfaz simple para autenticarse con la API usando OAUTH2. Se puede utilizar para crear inquilinos, crear suscripciones de licencia y monitorear la facturación. Cualquier cosa que se pueda hacer en el portal Cloud-IQ se puede automatizar utilizando este paquete.
Incluye varios esquemas de datos preconfigurados y métodos API. Los bloques de datos personalizados se pueden publicar en la API como diccionarios de Python. Métodos de descanso: obtener, publicar, parchar, poner y eliminar se pueden llamar con un punto final de API y un diccionario de datos como argumentos.
pip install crayon-cloudiq-sdk
Cómo crear credenciales del cliente API de Cloud-IQ
Crea un nuevo script de Python
Importar la clase CloudIQ
from cloudiq import CloudIQ
Inicializar una instancia de la clase CloudIQ con credenciales de usuario válidas:
from cloudiq import CloudIQ
CLIENT_ID = xxxxxxx-xxxx-xxxx-xxxx-xxxxxx
CLIENT_SECRET = xxxxxxx-xxxx-xxxx-xxxx-xxxxxx
USERNAME = "[email protected]"
PASSWORD = "Password123456"
crayon_api = CloudIQ(CLIENT_ID,CLIENT_SECRET,USERNAME,PASSWORD)
La forma preferida de importar credenciales es a través de variables Env.
from os import getenv
from cloudiq import CloudIQ
CLIENT_ID = getenv('CLIENT_ID')
CLIENT_SECRET = getenv('CLIENT_SECRET')
USERNAME = getenv('CLOUDIQ_USER')
PASSWORD = getenv('CLOUDIQ_PW')
crayon_api = CloudIQ(CLIENT_ID,CLIENT_SECRET,USERNAME,PASSWORD)
Las variables ENV se pueden establecer utilizando varios métodos, incluida la inyección, si usa contenedores y tuberías o a través de un administrador de secretos, como Azure KeyVault. Para configurarlos en un sistema local usando bash, ejecute los siguientes comandos:
export CLIENT_ID="xxxxxxx-xxxx-xxxx-xxxx-xxxxxx"
export CLIENT_SECRET="xxxxxxx-xxxx-xxxx-xxxx-xxxxxx"
export USERNAME="[email protected]"
export PASSWORD="Password123456"
Un método alternativo es usar un archivo config.ini que contiene las credenciales y recuperarlas utilizando el módulo configparser.
import configparser
from cloudiq import CloudIQ
# Parse configuration file
try:
config = configparser.ConfigParser()
config.read('config.ini')
ID = config['CRAYON_API']['ID']
SECRET = config['CRAYON_API']['SECRET']
USER = config['CRAYON_API']['USER']
PASS = config['CRAYON_API']['PASS']
except configparser.Error:
print("Configuration Error...config.ini not found")
exit()
except KeyError:
print("Configuration Error...configuration not found in config.ini")
exit()
crayon_api = CloudIQ(CLIENT_ID,CLIENT_SECRET,USERNAME,PASSWORD)
Consulte la carpeta de ejemplos para demostraciones de autenticación utilizando configParser, variables env y tuberías de Azure DevOps
Los datos que devuelven la API se guarda en un objeto de respuesta (excepto GetToken y ValidateToken). El objeto de respuesta contiene valores como el status_code, los encabezados, las cookies y el texto devuelto por la llamada API.
Para devolver los datos JSON de la respuesta, use el método de clase Respuesta.json ()
Para devolver el código de estado, use la variable Response.status_code
Todas las llamadas de API exitosas se devuelven 200 OK , 201 creadas o 204 sin contenido
La mayoría de las respuestas de error también proporcionan un mensaje de error detallado en forma JSON
Si recibe un error de 500, la carga útil del esquema de datos es probablemente el problema. Puede estar formateado incorrectamente o faltar los campos requeridos.
Recuerde manejar los estados de error al escribir automatizaciones
response = crayon_api.me()
if(int(response.status_code) == 200):
# Handle JSON data
print(response.json())
else:
# Handle Error
print(response.status_code)
exit(1)
Para obtener una explicación completa de los campos dentro de un objeto de respuesta, revise la información en los siguientes enlaces:
Solicitudes oficiales. Documentación de la clase de respuesta: https://docs.python-requests.org/en/latest/api/#requests.esponse
Escuelas W3: https://www.w3schools.com/python/ref_requests_response.asp
Hacer un ping de prueba no autenticado a la API
response = crayon_api.ping()
print(response,json())
Obtener información sobre el usuario autenticado actualmente
response = crayon_api.me()
print(response.json())
Haga una solicitud de obtención en bruto:
# retrieves all products in the Azure Active Directory product family within Org 123456
params = {
'OrganizationId': 123456,
'Include.ProductFamilyNames': 'Azure Active Directory'
}
# make a GET request to https://api.crayon.com/api/v1/AgreementProducts
response = crayon_api.get("https://api.crayon.com/api/v1/AgreementProducts",params)
print(response.json())
Los datos se pueden enviar a la API como un objeto de diccionario de Python estándar
Recuperar un token de autorización válido:
response = crayon_api.getToken()
print(response)
Cree un inquilino utilizando el esquema CustomerTenantDetailed:
# Set Unique Tenant Variables
tenant_name = "tenant_name"
domain_prefix = "domain_prefix"
# Initialize Tenant and Agreement objects
tenant = crayon_api.CustomerTenantDetailed(
tenant_name=tenant_name,
domain_prefix=domain_prefix,
org_id=111111,
org_name="Fake Org",
invoice_profile_id=80408, # Default
contact_firstname="First",
contact_lastname="Last",
contact_email="[email protected]",
contact_phone="5555555555",
address_firstname="First",
address_lastname="Last",
address_address="75 NoWhere Lane",
address_city="Boston",
address_countrycode="US",
address_region="MA",
address_zipcode="02109"
)
agreement = crayon_api.CustomerTenantAgreement(
firstname="First",
lastname="Last",
phone_number="5555555555",
email="[email protected]"
)
#Create New Tenant
new_tenant = crayon_api.createTenant(tenant.tenant)
print(new_tenant.json())
# Agree to Microsoft Customer Agreement
tenant_id = new_tenant["Tenant"]["Id"]
agreement = crayon_api.createTenantAgreement(tenant_id,agreement.agreement)
print(agreement.json())
Compre una licencia de Microsoft para un inquilino utilizando el esquema de cola de suscripción:
tenant_id=123456
# Create Subscription objects
azure_subscription = crayon_api.SubscriptionDetailed(
name="Azure P2 Subscription",
tenant_id=tenant_id,
part_number="CFQ7TTC0LFK5:0001",
quantity=1,
billing_cycle=1,
duration="P1M"
)
# Create Azure P2 Subscription
subscription = crayon_api.createSubscription(azure_subscription.subscription)
print(subscription.json)
from cloudiq import CloudIQ
help(CloudIQ)