Этот проект является SDK для API Crayon Cloudiq, который можно использовать в сценариях и приложениях Python. Предоставляет простой интерфейс для аутентификации с API с использованием OAuth2. Его можно использовать для создания арендаторов, создания лицензионных подписок и мониторинга выставления счетов. Все, что можно сделать на портале Cloud-IQ, может быть автоматизировано с помощью этого пакета.
Включает несколько предварительно настроенных схемы данных и методов API. Пользовательские блоки данных могут быть опубликованы в API как словаря Python. Методы отдыха: получить, публиковать, исправлять, положить и удалить, можно вызвать с помощью конечной точки API и словаря данных в качестве аргументов.
pip install crayon-cloudiq-sdk
Как создать учетные данные клиента Cloud-IQ API
Создать новый сценарий Python
Импортировать класс Cloudiq
from cloudiq import CloudIQ
Инициализируйте экземпляр класса Cloudiq с действительными учетными данными пользователя:
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)
Предпочтительным способом импорта учетных данных является переменные 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)
Переменные ENV могут быть установлены с использованием различных методов, включая инъекцию при использовании контейнеров и трубопроводов или через диспетчер Secrets, такой как Azure KeyVault. Чтобы установить их на локальную систему, используя Bash запустить следующие команды:
export CLIENT_ID="xxxxxxx-xxxx-xxxx-xxxx-xxxxxx"
export CLIENT_SECRET="xxxxxxx-xxxx-xxxx-xxxx-xxxxxx"
export USERNAME="[email protected]"
export PASSWORD="Password123456"
Альтернативный метод состоит в том, чтобы использовать файл config.ini, содержащий учетные данные, и извлечь его с помощью модуля 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)
См. Примеры папки для демонстрации аутентификации с использованием ConfigParser, переменных Env и Azure DevOps
Данные, возвращаемые API, сохраняются в объекте ответа (за исключением GetToken и Validatetoken). Объект ответа содержит такие значения, как status_code, заголовки, файлы cookie и текст, возвращаемый вызовом API.
Чтобы вернуть данные JSON из метода ответа response.json ().
Чтобы вернуть код состояния. Используйте переменную response.status_code
Все успешные вызовы API либо возвращают 200 OK , 201 создан , либо 204 нет контента
Большинство ответов на ошибки также предоставляют подробное сообщение об ошибке в форме JSON
Если вы получите ошибку 500, полезная нагрузка схемы данных, скорее всего, является проблемой. Это может быть отформатировано неправильно или пропущено требуемые поля.
Не забудьте обрабатывать статусы ошибок при написании автоматизаций
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)
Для полного объяснения полей в объекте ответа, пожалуйста, просмотрите информацию по следующим ссылкам:
Официальные запросы.
W3 Школы: https://www.w3schools.com/python/ref_requests_response.asp
Сделайте неаутентированный тест Ping в API
response = crayon_api.ping()
print(response,json())
Получите информацию об аутентифицированном пользователе в настоящее время
response = crayon_api.me()
print(response.json())
Сделайте запрос на сырой получить:
# 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())
Данные могут быть отправлены в API в качестве стандартного объекта Dictionary Python
Получить действительный токен авторизации:
response = crayon_api.getToken()
print(response)
Создайте арендатора, используя схему 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())
Купите лицензию Microsoft для арендатора, используя схему подписки:
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)