예제 #1
0
def create_if_vm(ctx, machine_name, _downburst=None):
    """
    Use downburst to create a virtual machine

    :param _downburst: Only used for unit testing.
    """
    if _downburst:
        status_info = _downburst.status
    else:
        status_info = teuthology.lock.query.get_status(machine_name)
    shortname = decanonicalize_hostname(machine_name)
    machine_type = status_info['machine_type']
    os_type = get_distro(ctx)
    os_version = get_distro_version(ctx)
    if not teuthology.lock.query.is_vm(status=status_info):
        return False

    if machine_type in cloud.get_types():
        return cloud.get_provisioner(
            machine_type,
            shortname,
            os_type,
            os_version,
            conf=getattr(ctx, 'config', dict()),
        ).create()

    has_config = hasattr(ctx, 'config') and ctx.config is not None
    if has_config and 'downburst' in ctx.config:
        log.warning('Usage of a custom downburst config has been deprecated.')

    dbrst = _downburst or \
        downburst.Downburst(name=machine_name, os_type=os_type,
                            os_version=os_version, status=status_info,
                            logfile=_logfile(ctx, shortname))
    return dbrst.create()
예제 #2
0
 def get_obj(self, name='node_name', os_type='ubuntu', os_version='ubuntu'):
     return cloud.get_provisioner(
         'my_provider',
         'node_name',
         'ubuntu',
         '16.04',
     )
예제 #3
0
 def get_obj(
         self, name='node_name', os_type='ubuntu', os_version='ubuntu'):
     return cloud.get_provisioner(
         'my_provider',
         'node_name',
         'ubuntu',
         '16.04',
     )
예제 #4
0
 def get_obj(
         self, name='node_name', os_type='ubuntu',
         os_version='16.04', conf=None):
     return cloud.get_provisioner(
         node_type='my_provider',
         name=name,
         os_type=os_type,
         os_version=os_version,
         conf=conf,
     )
예제 #5
0
 def get_obj(
         self, name='node_name', os_type='ubuntu',
         os_version='16.04', conf=None):
     return cloud.get_provisioner(
         node_type='my_provider',
         name=name,
         os_type=os_type,
         os_version=os_version,
         conf=conf,
     )
예제 #6
0
 def test_get_provisioner(self):
     obj = cloud.get_provisioner(
         'my_provider',
         'node_name',
         'ubuntu',
         '16.04',
         dict(foo='bar'),
     )
     assert obj.provider.name == 'my_provider'
     assert obj.name == 'node_name'
     assert obj.os_type == 'ubuntu'
     assert obj.os_version == '16.04'
예제 #7
0
 def test_get_provisioner(self):
     obj = cloud.get_provisioner(
         'my_provider',
         'node_name',
         'ubuntu',
         '16.04',
         dict(foo='bar'),
     )
     assert obj.provider.name == 'my_provider'
     assert obj.name == 'node_name'
     assert obj.os_type == 'ubuntu'
     assert obj.os_version == '16.04'
예제 #8
0
def destroy_if_vm(ctx,
                  machine_name,
                  user=None,
                  description=None,
                  _downburst=None):
    """
    Use downburst to destroy a virtual machine

    Return False only on vm downburst failures.

    :param _downburst: Only used for unit testing.
    """
    if _downburst:
        status_info = _downburst.status
    else:
        status_info = teuthology.lock.query.get_status(machine_name)
    if not status_info or not teuthology.lock.query.is_vm(status=status_info):
        return True
    if user is not None and user != status_info['locked_by']:
        msg = "Tried to destroy {node} as {as_user} but it is locked " + \
            "by {locked_by}"
        log.error(
            msg.format(node=machine_name,
                       as_user=user,
                       locked_by=status_info['locked_by']))
        return False
    if (description is not None and description != status_info['description']):
        msg = "Tried to destroy {node} with description {desc_arg} " + \
            "but it is locked with description {desc_lock}"
        log.error(
            msg.format(node=machine_name,
                       desc_arg=description,
                       desc_lock=status_info['description']))
        return False
    machine_type = status_info.get('machine_type')
    shortname = decanonicalize_hostname(machine_name)
    if machine_type == 'openstack':
        return openstack.ProvisionOpenStack().destroy(shortname)
    elif machine_type in cloud.get_types():
        return cloud.get_provisioner(machine_type, shortname, None,
                                     None).destroy()

    dbrst = _downburst or \
        downburst.Downburst(name=machine_name, os_type=None,
                            os_version=None, status=status_info,
                            logfile=_logfile(ctx, shortname))
    return dbrst.destroy()
예제 #9
0
    def get_obj(
            self, name='node_name', os_type='ubuntu',
            os_version='16.04', conf=None, test_conf=None):

        if test_conf:
            yaml_file = os.path.dirname(__file__) + '/' + test_conf
            print("Reading conf: %s" % yaml_file)
            with open(yaml_file) as f:
                teuth_conf=yaml.safe_load(f)
            print(teuth_conf)
            config.libcloud = deepcopy(teuth_conf['libcloud'] or test_config)
        else:
            config.libcloud = deepcopy(test_config)
        return cloud.get_provisioner(
            node_type='my_provider',
            name=name,
            os_type=os_type,
            os_version=os_version,
            conf=conf,
        )