Ce projet est un SDK pour l'API CloudIQ de Crayon qui peut être utilisé dans les scripts et applications Python. Fournit une interface simple à authentifier avec l'API à l'aide d'OAuth2. Il peut être utilisé pour créer des locataires, créer des abonnements de licence et surveiller la facturation. Tout ce qui peut être fait dans le portail Cloud-IQ peut être automatisé à l'aide de ce package.
Comprend plusieurs méthodes de données préconfigurées et des méthodes d'API. Les blocs de données personnalisés peuvent être affichés dans l'API en tant que dictionnaires Python. Méthodes de repos: obtenir, publier, patcher, mettre et supprimer peut être appelé avec un point de terminaison API et un dictionnaire de données comme arguments.
pip install crayon-cloudiq-sdk
Comment créer des informations d'identification du client API Cloud-IQ
Créer un nouveau script Python
Importer la classe CloudIQ
from cloudiq import CloudIQ
Initialisez une instance de la classe CloudIQ avec des informations d'identification utilisateur valides:
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 façon préférée d'importer des informations d'identification passe par des 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)
Les variables Env peuvent être définies en utilisant diverses méthodes, y compris l'injection, si vous utilisez des conteneurs et des pipelines ou via un gestionnaire de secrets tels qu'Azure KeyVault. Pour les définir sur un système local à l'aide de bash, exécutez les commandes suivantes:
export CLIENT_ID="xxxxxxx-xxxx-xxxx-xxxx-xxxxxx"
export CLIENT_SECRET="xxxxxxx-xxxx-xxxx-xxxx-xxxxxx"
export USERNAME="[email protected]"
export PASSWORD="Password123456"
Une autre méthode consiste à utiliser un fichier config.ini contenant les informations d'identification et à les récupérer à l'aide du module 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)
Voir le dossier Exemples pour les démos d'authentification à l'aide de configParser, de variables Env et de pipelines Azure DevOps
Les données renvoyées par l'API sont enregistrées dans un objet de réponse (à l'exception de GetToken et ValidateToken). L'objet de réponse contient des valeurs telles que le statut_code, les en-têtes, les cookies et le texte renvoyé par l'appel de l'API.
Pour retourner les données JSON à partir de la réponse Utilisez la méthode de la classe Response.json ()
Pour retourner le code d'état Utilisez la variable de réponse.status_code
Tous les appels API réussis Retour 200 OK , 201 créé , ou 204 Aucun contenu
La plupart des réponses d'erreur fournissent également un message d'erreur détaillé sous forme JSON
Si vous recevez une erreur de 500, la charge utile du schéma de données est probablement le problème. Il peut être formaté de manière incorrecte ou manquante les champs requis.
N'oubliez pas de gérer les statuts d'erreur lors de la rédaction d'automations
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)
Pour une explication complète des champs dans un objet de réponse, veuillez consulter les informations dans les liens suivants:
Demandes officielles. Response Classe Documentation: https://docs.python-requests.org/en/latest/api/#requests.response
Écoles W3: https://www.w3schools.com/python/ref_requests_response.asp
Faire un ping de test non authentifié vers l'API
response = crayon_api.ping()
print(response,json())
Obtenez des informations sur l'utilisateur actuellement authentifié
response = crayon_api.me()
print(response.json())
Faites une demande de get brut:
# 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())
Les données peuvent être envoyées à l'API en tant qu'objet de dictionnaire Python standard
Récupérer un jeton d'autorisation valide:
response = crayon_api.getToken()
print(response)
Créez un locataire en utilisant le schéma de création de création: le schéma:
# 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())
Achetez une licence Microsoft pour un locataire en utilisant le schéma d'abonnement:
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)