ovh_build_android_h870/ovh_orchestrator/__main__.py

112 рядки
3.1 KiB
Python

import uuid
import sys
import time
import ovh
from . import config
if __name__ == '__main__':
client = ovh.Client(
endpoint=config.ovh_endpoint,
application_key=config.ovh_application_key,
application_secret=config.ovh_application_secret,
consumer_key=config.ovh_consumer_key,
)
if len(sys.argv) < 2:
sys.exit(1)
# Create VM
if sys.argv[1] == 'init':
# Get image id
result = client.get(
'/cloud/project/' + config.ovh_public_cloud_project + '/image',
flavorType=config.ovh_public_cloud_flavor,
osType='linux',
region=config.ovh_public_cloud_region,
)
image_id = next(
x['id']
for x in result
if x['name'] == config.ovh_public_cloud_image
)
# Get SSH key id
result = client.get(
'/cloud/project/' + config.ovh_public_cloud_project + '/sshkey',
region=config.ovh_public_cloud_region,
)
ssh_key_id = next(
x['id']
for x in result
if x['name'] == config.ovh_public_cloud_sshkey_name
)
# Get flavor id
result = client.get(
'/cloud/project/' + config.ovh_public_cloud_project + '/flavor',
region=config.ovh_public_cloud_region,
)
flavor_id = next(
x['id']
for x in result
if x['name'] == config.ovh_public_cloud_flavor
)
# Create instance
name = str(uuid.uuid4())
result = client.post(
'/cloud/project/' + config.ovh_public_cloud_project + '/instance',
flavorId=flavor_id,
imageId=image_id,
monthlyBilling=False,
name=name,
region=config.ovh_public_cloud_region,
sshKeyId=ssh_key_id
)
if 'id' not in result:
sys.exit(1)
# Wait for IP address
while True:
result = client.get(
'/cloud/project/' + config.ovh_public_cloud_project + '/instance',
region=config.ovh_public_cloud_region,
)
ipAddresses = next(
x['ipAddresses']
for x in result
if x['name'] == name
)
if ipAddresses:
print(ipAddresses[0]['ip'])
sys.exit(0)
time.sleep(30)
# Clear VM
elif sys.argv[1] == 'purge':
if len(sys.argv) < 3:
sys.exit(1)
# Get instance id from its IP address
result = client.get(
'/cloud/project/' + config.ovh_public_cloud_project + '/instance',
region=config.ovh_public_cloud_region,
)
print(result)
instance_id = next(
x['id']
for x in result
if sys.argv[2] in [x['ip'] for x in x['ipAddresses']]
)
# Delete instance
client.delete(
'/cloud/project/' + config.ovh_public_cloud_project +
'/instance/' + instance_id
)
else:
sys.exit(1)