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(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
Example #3
0
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
Example #4
0
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()
Example #5
0
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: