112 line
3.1 KiB
Python
112 line
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)
|