def launch_vm(vmname, imagename, ip, key, flavorname, cloudinit=False, configdrive=False): nova = osclients.get_novaclient() glance = osclients.get_glanceclient() neutron = osclients.get_neutronclient() image_id = glance.images.find(name=imagename).id netid = neutron.list_networks(name='shared-net')['networks'][0]['id'] flavor = nova.flavors.find(name=flavorname) nic = {'net-id': netid} extra_params = dict() if cloudinit: with open('fake_test_key.pub') as fileh: sshkey = fileh.read() with open('public-fake.gpg') as fileh: lines = fileh.readlines() lines.insert(0, '\n') gpgkey = ' '.join(lines) cloud_init_meta = cloud_init_meta.format(sshkey, gpgkey) extra_params['userdata'] = cloud_init_meta if configdrive: extra_params['files'] = {'/etc/fiware-support/defaultssh.pub': open('fake_test_key.pub'), '/etc/fiware-support/defaultgpg.pub': open('public-fake.gpg')} extra_params['config_drive'] = True extra_params['meta'] = {'encrypt': 'True'} server = nova.servers.create( vmname, flavor=flavor, image=image_id, key_name=key, security_groups=['default'], nics=[nic], **extra_params) time.sleep(2) if ip: server.add_floating_ip(ip) return server.id
def launch_vm(vm_n, flavor_n, securityg_n, image_n, ifaces, user_data=None, keystone_ip=None, region=None, region_keystone=None): """ Launch a VM and wait until it is ready. :param vm_n: virtual machine name :param flavor_n: flavor name :param securityg_n: securigy group name :param image_n: image name :param ifaces: array with the interfaces :param user_data: optional init script or cloud init data :return: a VM object """ # Get image image_id = osclients.get_glanceclient().images.find(name=image_n).id nova_c = osclients.get_novaclient() flavor = nova_c.flavors.find(name=flavor_n) extra_params = dict() # load script to launch with nova.servers.create() if user_data: data = open(user_data).read() extra_params['userdata'] = data extra_params['meta'] = {"Region": region, "keystone_ip": keystone_ip, "region_keystone": region_keystone} server = nova_c.servers.create( vm_n, flavor=flavor.id, image=image_id, key_name=settings.key_name, security_groups=[securityg_n], nics=ifaces, **extra_params) print('{0}: VM with UUID {1}'.format(region, server.id)) # wait until the vm is active tries = 1 while server.status != 'ACTIVE' and tries < 40: print('Waiting for ACTIVE status. (Try ' + str(tries) + '/30)') time.sleep(5) try: server = nova_c.servers.get(server.id) except: pass tries += 1 if server.status != 'ACTIVE': sys.stderr.write('Failed waiting the VM is active\n') sys.exit(-1) return server
from utils.osclients import osclients import time from subprocess import check_call import os import shutil def copy_using_guestmount(): check_call(['sudo', 'guestmount', '-a', 'image.tmp', '-i', 'mnt']) check_call(['sudo', 'tar', 'files.tar', '-C', '/mnt/sbin']) check_call(['sudo', 'umount', 'mnt']) images = ['ubuntu14.04_rc', 'centos7_rc', 'debian7_rc', 'centos6_rc', 'ubuntu12.04_rc'] black_list = set('centos7_rc') glance = osclients.get_glanceclient() check_call(['./preparetar.sh']) for image_name in images: image = glance.images.find(name=image_name) print(image.name, image.id) file_path = '/var/lib/glance/images/' + image.id check_call(['sudo', 'cp', file_path, 'image.tmp']) try: if image in black_list: copy_using_guestmount() else: check_call(['sudo', 'virt-tar-in', '-a', 'image.tmp', 'files.tar', '/']) except Exception: copy_using_guestmount()
if len(sys.argv) < 2 or len(sys.argv) > 4: sys.stderr.write('Please, use:\n') msg = ' If the image exists: {} <image_uuid> [oldname]\n'.format( sys.argv[0]) sys.stderr.write(msg) msg = ' otherwise : {} <image_uuid> <nid> <type>\n'.format( sys.argv[0]) sys.stderr.write(msg) sys.exit(-1) owner = osclients.get_tenant_id() glance = osclients.get_glanceclient() image = glance.images.get(sys.argv[1]) if image.name[-3:] != '_rc': msg = 'According the name, the image to publish is not a _rc: {}\n'.format( image.name) sys.stderr.write(msg) sys.exit(-1) images = glance.images.findall() nid = None image_type = None # if there is a public image with the same name, use its nid, type # rename the image and turn it private if len(sys.argv) == 3: