Merge pull request #189 from gnuoy/feature/make-guest-boot-more-configurable
Feature/make guest boot more configurable
This commit is contained in:
@@ -36,11 +36,26 @@ boot_tests = {
|
||||
'bootstring': 'finished at'}}
|
||||
|
||||
|
||||
def launch_instance(instance_key):
|
||||
def launch_instance(instance_key, use_boot_volume=False, vm_name=None,
|
||||
private_network_name=None, image_name=None,
|
||||
flavor_name=None, external_network_name=None):
|
||||
"""Launch an instance.
|
||||
|
||||
:param instance_key: Key to collect associated config data with.
|
||||
:type instance_key: str
|
||||
:param use_boot_volume: Whether to boot guest from a shared volume.
|
||||
:type use_boot_volume: boolean
|
||||
:param vm_name: Name to give guest.
|
||||
:type vm_name: str
|
||||
:param private_network_name: Name of private network to attach guest to.
|
||||
:type private_network_name: str
|
||||
:param image_name: Image name to use with guest.
|
||||
:type image_name: str
|
||||
:param flavor_name: Flavor name to use with guest.
|
||||
:type flavor_name: str
|
||||
:param external_network_name: External network to create floating ip from
|
||||
for guest.
|
||||
:type external_network_name: str
|
||||
"""
|
||||
keystone_session = openstack_utils.get_overcloud_keystone_session()
|
||||
nova_client = openstack_utils.get_nova_session_client(keystone_session)
|
||||
@@ -48,19 +63,38 @@ def launch_instance(instance_key):
|
||||
keystone_session)
|
||||
|
||||
# Collect resource information.
|
||||
vm_name = time.strftime("%Y%m%d%H%M%S")
|
||||
image = nova_client.glance.find_image(
|
||||
boot_tests[instance_key]['image_name'])
|
||||
flavor = nova_client.flavors.find(
|
||||
name=boot_tests[instance_key]['flavor_name'])
|
||||
net = neutron_client.find_resource("network", "private")
|
||||
vm_name = vm_name or time.strftime("%Y%m%d%H%M%S")
|
||||
|
||||
image_name = image_name or boot_tests[instance_key]['image_name']
|
||||
image = nova_client.glance.find_image(image_name)
|
||||
|
||||
flavor_name = flavor_name or boot_tests[instance_key]['flavor_name']
|
||||
flavor = nova_client.flavors.find(name=flavor_name)
|
||||
|
||||
private_network_name = private_network_name or "private"
|
||||
net = neutron_client.find_resource("network", private_network_name)
|
||||
nics = [{'net-id': net.get('id')}]
|
||||
|
||||
external_network_name = external_network_name or "ext_net"
|
||||
|
||||
if use_boot_volume:
|
||||
bdmv2 = [{
|
||||
'boot_index': '0',
|
||||
'uuid': image.id,
|
||||
'source_type': 'image',
|
||||
'volume_size': flavor.disk,
|
||||
'destination_type': 'volume',
|
||||
'delete_on_termination': True}]
|
||||
image = None
|
||||
else:
|
||||
bdmv2 = None
|
||||
|
||||
# Launch instance.
|
||||
logging.info('Launching instance {}'.format(vm_name))
|
||||
instance = nova_client.servers.create(
|
||||
name=vm_name,
|
||||
image=image,
|
||||
block_device_mapping_v2=bdmv2,
|
||||
flavor=flavor,
|
||||
key_name=nova_utils.KEYPAIR_NAME,
|
||||
nics=nics)
|
||||
@@ -83,7 +117,7 @@ def launch_instance(instance_key):
|
||||
logging.info('Assigning floating ip.')
|
||||
ip = openstack_utils.create_floating_ip(
|
||||
neutron_client,
|
||||
"ext_net",
|
||||
external_network_name,
|
||||
port=port)['floating_ip_address']
|
||||
logging.info('Assigned floating IP {} to {}'.format(ip, vm_name))
|
||||
openstack_utils.ping_response(ip)
|
||||
|
||||
Reference in New Issue
Block a user