diff options
author | 2016-07-04 10:08:02 +0200 | |
---|---|---|
committer | 2016-07-04 16:56:37 +0200 | |
commit | 57800d5b7389d7d244e0d50d198c720313473398 (patch) | |
tree | ec1a1c25d9fcfc3ff7613122a9c71e233bd6cddd /utils/openstack_utils.py | |
parent | a609ed9f56fac854b41418dbaa13ae53db5da98d (diff) |
Add example script creating an instance
This is to be used by feature projects or newcomers to functest.
SFC or BGPVPN test cases can be based on this one.
The script creates an instance and assigns a floating IP to it.
Change-Id: If35495631031187bfb5382ba8c0a8884dfaa3d7f
Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
Depends-On: Ie10d55872bc8c5a404b0d0156ee49a9d94482008
Diffstat (limited to 'utils/openstack_utils.py')
-rw-r--r-- | utils/openstack_utils.py | 103 |
1 files changed, 81 insertions, 22 deletions
diff --git a/utils/openstack_utils.py b/utils/openstack_utils.py index 9640fb9b..1379d782 100644 --- a/utils/openstack_utils.py +++ b/utils/openstack_utils.py @@ -191,9 +191,9 @@ def create_flavor(nova_client, flavor_name, ram, disk, vcpus): def create_instance(flavor_name, image_id, network_id, - instance_name="", - config_drive=False, - userdata=""): + instance_name="functest-vm", + confdrive=True, + userdata=None): nova_client = get_nova_client() try: flavor = nova_client.flavors.find(name=flavor_name) @@ -202,14 +202,23 @@ def create_instance(flavor_name, flavor_name) print(nova_client.flavor.list()) return -1 - - return nova_client.servers.create( - name=instance_name, - flavor=flavor, - image=image_id, - config_drive=config_drive, - nics=[{"net-id": network_id}] - ) + if userdata is None: + instance = nova_client.servers.create( + name=instance_name, + flavor=flavor, + image=image_id, + nics=[{"net-id": network_id}] + ) + else: + instance = nova_client.servers.create( + name=instance_name, + flavor=flavor, + image=image_id, + nics=[{"net-id": network_id}], + config_drive=confdrive, + userdata=userdata + ) + return instance def create_instance_and_wait_for_active(flavor_name, @@ -224,9 +233,9 @@ def create_instance_and_wait_for_active(flavor_name, instance = create_instance(flavor_name, image_id, network_id, - instance_name="", - config_drive=False, - userdata="") + instance_name, + config_drive, + userdata) count = VM_BOOT_TIMEOUT / SLEEP for n in range(count, -1, -1): @@ -653,6 +662,46 @@ def create_secgroup_rule(neutron_client, sg_id, direction, protocol, return False +def create_security_group_full(logger, neutron_client, + sg_name, sg_description): + sg_id = get_security_group_id(neutron_client, sg_name) + if sg_id != '': + logger.info("Using existing security group '%s'..." % sg_name) + else: + logger.info("Creating security group '%s'..." % sg_name) + SECGROUP = create_security_group(neutron_client, + sg_name, + sg_description) + if not SECGROUP: + logger.error("Failed to create the security group...") + return False + + sg_id = SECGROUP['id'] + + logger.debug("Security group '%s' with ID=%s created successfully." + % (SECGROUP['name'], sg_id)) + + logger.debug("Adding ICMP rules in security group '%s'..." + % sg_name) + if not create_secgroup_rule(neutron_client, sg_id, + 'ingress', 'icmp'): + logger.error("Failed to create the security group rule...") + return False + + logger.debug("Adding SSH rules in security group '%s'..." + % sg_name) + if not create_secgroup_rule( + neutron_client, sg_id, 'ingress', 'tcp', '22', '22'): + logger.error("Failed to create the security group rule...") + return False + + if not create_secgroup_rule( + neutron_client, sg_id, 'egress', 'tcp', '22', '22'): + logger.error("Failed to create the security group rule...") + return False + return sg_id + + def add_secgroup_to_instance(nova_client, instance_id, secgroup_id): try: nova_client.servers.add_security_group(instance_id, secgroup_id) @@ -711,18 +760,28 @@ def get_image_id(glance_client, image_name): return id -def create_glance_image(glance_client, image_name, file_path, public=True): +def create_glance_image(glance_client, image_name, file_path, disk="qcow2", + container="bare", public=True, logger=None): if not os.path.isfile(file_path): print "Error: file " + file_path + " does not exist." return False try: - with open(file_path) as fimage: - image = glance_client.images.create(name=image_name, - is_public=public, - disk_format="qcow2", - container_format="bare", - data=fimage) - return image.id + image_id = get_image_id(glance_client, image_name) + if image_id != '': + if logger: + logger.info("Image %s already exists." % image_name) + else: + if logger: + logger.info("Creating image '%s' from '%s'..." % (image_name, + file_path)) + with open(file_path) as fimage: + image = glance_client.images.create(name=image_name, + is_public=public, + disk_format=disk, + container_format=container, + data=fimage) + image_id = image.id + return image_id except Exception, e: print ("Error [create_glance_image(glance_client, '%s', '%s', " "'%s')]:" % (image_name, file_path, str(public))), e |