Last active
May 19, 2016 21:55
-
-
Save cloudnull/2f3931e51062dc7b325faf9a24974006 to your computer and use it in GitHub Desktop.
Build N number of servers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
clouds: | |
osic-ci: | |
auth: | |
auth_url: http://localhost:5000 | |
project_name: admin | |
username: admin | |
password: SuperSecrete | |
region_name: RegionOne |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python2 | |
# To run a parallel test with many VMs use gnu-parallel | |
# command exaample: parallel -k -n0 -j 24 ./serial-shade-test.py ::: {1..24} | |
import shade | |
import multiprocessing | |
import uuid | |
import time | |
# ============================ TEST CONSTANTS ============================ | |
CLOUD_NAME = 'osic-infra-test' | |
CLOUD_FLAVOR_NAME = 'm1.small' | |
CLOUD_IMAGE_NAME = 'ubuntu-server-14.04' | |
CLOUD_NODE_BASENAME = 'ADMIN_SHADE_TEST_NODE' | |
CLOUD_NETWORK_ID = 'fd9d445a-7d6b-44f8-b349-aaa20498eb38' | |
CLOUD_KEYNAME = 'cloudnull' | |
# ============================ TEST CONSTANTS ============================ | |
# shade.simple_logging(debug=True) | |
cloud = shade.openstack_cloud(cloud=CLOUD_NAME) | |
flavor = cloud.get_flavor(CLOUD_FLAVOR_NAME) | |
image = cloud.get_image(CLOUD_IMAGE_NAME) | |
name = CLOUD_NODE_BASENAME | |
network = cloud.get_network(CLOUD_NETWORK_ID) | |
def shade_create_job(**kwargs): | |
try: | |
print('server create') | |
server = cloud.wait_for_server( | |
server=cloud.create_server(wait=False, **kwargs), | |
auto_ip=True, | |
reuse=False, | |
timeout=120 | |
) | |
print(server) | |
except Exception as exp: | |
print('FAILURE PROCESSING: %s -- ERROR: %s' % (kwargs['name'], exp)) | |
def shade_delete_job(**kwargs): | |
try: | |
cloud.delete_server(kwargs['name'], wait=kwargs['wait'], delete_ips=kwargs['delete_ips']) | |
except Exception as exp: | |
print('FAILURE PROCESSING: %s -- ERROR: %s' % (kwargs['name'], exp)) | |
kwargs = { | |
'name': '%s-%s' % (name, uuid.uuid4()), | |
'image': image, | |
'flavor': flavor, | |
'key_name': CLOUD_KEYNAME, | |
'availability_zone': 'nova', | |
'nics': [{'net-id': network['id']}] | |
} | |
print('Starting build test') | |
server = shade_create_job(**kwargs) | |
print('Starting delete test') | |
kwargs['delete_ips'] = True | |
kwargs['wait'] = False | |
shade_delete_job(**kwargs) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python2 | |
import shade | |
import multiprocessing | |
import uuid | |
# ============================ TEST CONSTANTS ============================ | |
CLOUD_SERVER_COUNT = 24 | |
CLOUD_NAME = 'osic-infra-test' | |
CLOUD_FLAVOR_NAME = 'm1.small' | |
CLOUD_IMAGE_NAME = 'ubuntu-server-14.04' | |
CLOUD_NODE_BASENAME = 'ADMIN_SHADE_TEST_NODE' | |
CLOUD_NETWORK_ID = 'fd9d445a-7d6b-44f8-b349-aaa20498eb38' | |
CLOUD_KEYNAME = 'cloudnull' | |
# ============================ TEST CONSTANTS ============================ | |
def shade_create_job(**kwargs): | |
# shade.simple_logging(debug=True) | |
cloud = shade.openstack_cloud(cloud=CLOUD_NAME) | |
flavor = cloud.get_flavor(CLOUD_FLAVOR_NAME) | |
image = cloud.get_image(CLOUD_IMAGE_NAME) | |
network = cloud.get_network(CLOUD_NETWORK_ID) | |
kwargs.update({ | |
'image': image, | |
'flavor': flavor, | |
'key_name': CLOUD_KEYNAME, | |
'availability_zone': 'nova', | |
'nics': [{'net-id': network['id']}] | |
}) | |
try: | |
print('server create') | |
server = cloud.wait_for_server( | |
server=cloud.create_server(wait=False, **kwargs), | |
auto_ip=True, | |
reuse=False, | |
timeout=120 | |
) | |
print(server) | |
except Exception as exp: | |
print('FAILURE PROCESSING: %s -- ERROR: %s' % (kwargs['name'], exp)) | |
def shade_delete_job(**kwargs): | |
cloud = shade.openstack_cloud(cloud=CLOUD_NAME) | |
try: | |
cloud.delete_server(kwargs['name'], wait=kwargs['wait'], delete_ips=kwargs['delete_ips']) | |
except Exception as exp: | |
print('FAILURE PROCESSING: %s -- ERROR: %s' % (start_job.name, exp)) | |
kwargs = dict() | |
create_jobs = list() | |
for _ in range(CLOUD_SERVER_COUNT): | |
node_kwargs = kwargs.copy() | |
node_kwargs['name'] = '%s-%s' % (CLOUD_NODE_BASENAME, uuid.uuid4()) | |
create_jobs.append(node_kwargs) | |
to_do_jobs = [ | |
multiprocessing.Process( | |
target=shade_create_job, | |
kwargs=job, | |
name=job['name'] | |
) | |
for job in create_jobs | |
] | |
print('Starting build test') | |
for start_job in to_do_jobs: | |
start_job.start() | |
for wait_on_job in to_do_jobs: | |
wait_on_job.join() | |
delete_jobs = list() | |
for job in create_jobs: | |
delete_job = job.copy() | |
delete_job['wait'] = False | |
delete_job['delete_ips'] = True | |
delete_jobs.append(delete_job) | |
to_do_jobs = [ | |
multiprocessing.Process( | |
target=shade_delete_job, | |
kwargs=job, | |
name=job['name'] | |
) | |
for job in delete_jobs | |
] | |
print('Starting delete test') | |
for start_job in to_do_jobs: | |
start_job.start() | |
for wait_on_job in to_do_jobs: | |
wait_on_job.join() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import shade | |
import multiprocessing | |
import random | |
import time | |
import uuid | |
SERVER_COUNT=25 | |
# shade.simple_logging(debug=True) | |
cloud = shade.openstack_cloud(cloud='osic-ci') | |
flavor = cloud.get_flavor('m2.medium') | |
image = cloud.get_image('ubuntu-server-14.04') | |
name = 'ADMIN_TEST_NODE' | |
network = cloud.get_network('ADMIN_TEST_NET') | |
ip_pool = 'GATEWAY_NET' | |
build_errors = list() | |
def shade_job(**kwargs): | |
try: | |
node = cloud.create_server(**kwargs) | |
except Exception as exp: | |
print('FAILURE PROCESSING: %s -- ERROR: %s' % (start_job.name, exp)) | |
else: | |
print(node) | |
kwargs = { | |
'auto_ip': False, | |
'image': image, | |
'flavor': flavor, | |
'wait': True, | |
'network': network['id'], | |
'ip_pool': ip_pool | |
} | |
jobs = list() | |
for _ in range(SERVER_COUNT): | |
node_kwargs = kwargs.copy() | |
node_kwargs['name'] = '%s-%s' % (name, uuid.uuid4()) | |
jobs.append(node_kwargs) | |
to_do_jobs = [ | |
multiprocessing.Process( | |
target=shade_job, | |
kwargs=job, | |
name=job['name'] | |
) | |
for job in jobs | |
] | |
for start_job in to_do_jobs: | |
time.sleep(random.uniform(random.randint(2,12), 2)) | |
start_job.start() | |
for wait_on_job in to_do_jobs: | |
wait_on_job.join() | |
for job in jobs: | |
try: | |
cloud.delete_server(job['name'], wait=True, delete_ips=True) | |
except Exception as exp: | |
print('FAILED TO DELETE NODE, ERROR: %s' % exp) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import shade | |
import multiprocessing | |
import uuid | |
SERVER_COUNT=25 | |
# shade.simple_logging(debug=True) | |
cloud = shade.openstack_cloud(cloud='osic-ci') | |
flavor = cloud.get_flavor('m2.medium') | |
image = cloud.get_image('ubuntu-server-14.04') | |
name = 'ADMIN_TEST_NODE' | |
network = cloud.get_network('ADMIN_TEST_NET') | |
ip_pool = 'GATEWAY_NET' | |
build_errors = list() | |
def shade_job(**kwargs): | |
try: | |
cloud.create_server(**kwargs) | |
except Exception as exp: | |
print('FAILURE PROCESSING: %s -- ERROR: %s' % (start_job.name, exp)) | |
kwargs = { | |
'auto_ip': False, | |
'image': image, | |
'flavor': flavor, | |
'wait': True, | |
'network': network['id'], | |
'ip_pool': ip_pool | |
} | |
jobs = list() | |
for _ in range(SERVER_COUNT): | |
node_kwargs = kwargs.copy() | |
node_kwargs['name'] = '%s-%s' % (name, uuid.uuid4()) | |
jobs.append(node_kwargs) | |
to_do_jobs = [ | |
multiprocessing.Process( | |
target=shade_job, | |
kwargs=job, | |
name=job['name'] | |
) | |
for job in jobs | |
] | |
for start_job in to_do_jobs: | |
start_job.start() | |
for wait_on_job in to_do_jobs: | |
wait_on_job.join() | |
for job in jobs: | |
try: | |
cloud.delete_server(job['name'], wait=True, delete_ips=True) | |
except Exception as exp: | |
print('FAILED TO DELETE NODE, ERROR: %s' % exp) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment