示例#1
0
 def _setup_simple_config_fields(self, config, instance, fields):
     for src, dest in fields:
         try:
             src_obj = instance.data.fields[src]
             config[dest] = JsonObject.unwrap(src_obj)
         except (KeyError, AttributeError):
             pass
示例#2
0
 def _setup_simple_config_fields(self, config, instance, fields):
     for src, dest in fields:
         try:
             src_obj = instance.data.fields[src]
             config[dest] = JsonObject.unwrap(src_obj)
         except (KeyError, AttributeError):
             pass
示例#3
0
    def _reply(self, req, response_data):
        if req is None:
            return None
        resp = utils.reply(req)
        resp.data = JsonObject(response_data)

        return resp
示例#4
0
    def _do_volume_activate(self, volume, storage_pool, progress):
        if not self._is_managed_volume(volume):
            return
        driver = volume.data['fields']['driver']
        try:
            if volume.data['fields']['driverOpts']:
                driver_opts = volume.data['fields']['driverOpts']
            else:
                driver_opts = None
        except KeyError:
            driver_opts = None
        v = DockerConfig.storage_api_version()
        client = docker_client(version=v)

        # Rancher longhorn volumes indicate when they've been moved to a
        # different host. If so, we have to delete before we create
        # to cleanup the reference in docker.
        try:
            vol = client.inspect_volume(volume.name)
        except APIError:
            pass
        else:
            try:
                if vol and vol['Mountpoint'] == 'moved':
                    log.info(
                        'Removing moved volume %s so that it can be '
                        're-added.', volume.name)
                    client.remove_volume(volume.name)
            except KeyError:
                pass

        client.create_volume(volume.name, driver,
                             JsonObject.unwrap(driver_opts))
示例#5
0
    def _do_volume_activate(self, volume, storage_pool, progress):
        if not self._is_managed_volume(volume):
            return
        driver = volume.data['fields']['driver']
        try:
            if volume.data['fields']['driverOpts']:
                driver_opts = volume.data['fields']['driverOpts']
            else:
                driver_opts = None
        except KeyError:
            driver_opts = None
        v = DockerConfig.storage_api_version()
        client = docker_client(version=v)

        # Rancher longhorn volumes indicate when they've been moved to a
        # different host. If so, we have to delete before we create
        # to cleanup the reference in docker.
        try:
            vol = client.inspect_volume(volume.name)
        except APIError:
            pass
        else:
            try:
                if vol and vol['Mountpoint'] == 'moved':
                    log.info('Removing moved volume %s so that it can be '
                             're-added.', volume.name)
                    client.remove_volume(volume.name)
            except KeyError:
                pass

        client.create_volume(volume.name, driver,
                             JsonObject.unwrap(driver_opts))
示例#6
0
def event_test(agent, name, pre_func=None, post_func=None):
    req = json_data(name)
    resp_valid = json_data(name + '_resp')

    if pre_func is not None:
        pre_func(req)

    resp = agent.execute(req)
    if post_func is not None:
        post_func(req, resp)

    del resp["id"]
    del resp["time"]

    _diff_dict(JsonObject.unwrap(resp_valid), JsonObject.unwrap(resp))
    assert_equals(JsonObject.unwrap(resp_valid), JsonObject.unwrap(resp))

    return req, resp
示例#7
0
 def _do_volume_activate(self, volume, storage_pool, progress):
     if not self._is_managed_volume(volume):
         return
     driver = volume.data["fields"]["driver"]
     try:
         if volume.data["fields"]["driverOpts"]:
             driver_opts = volume.data["fields"]["driverOpts"]
         else:
             driver_opts = None
     except KeyError:
         driver_opts = None
     v = DockerConfig.storage_api_version()
     docker_client(version=v).create_volume(volume.name, driver, JsonObject.unwrap(driver_opts))
示例#8
0
 def _do_volume_activate(self, volume, storage_pool, progress):
     if not self._is_managed_volume(volume):
         return
     driver = volume.data['fields']['driver']
     try:
         if volume.data['fields']['driverOpts']:
             driver_opts = volume.data['fields']['driverOpts']
         else:
             driver_opts = None
     except KeyError:
         driver_opts = None
     v = DockerConfig.storage_api_version()
     docker_client(version=v).create_volume(volume.name, driver,
                                            JsonObject.unwrap(driver_opts))
示例#9
0
def event_test(agent, name, pre_func=None, post_func=None, diff=True):
    req = json_data(name)
    valid_resp_file = json_data(name + '_resp')
    valid_resp = JsonObject.unwrap(valid_resp_file)

    if pre_func is not None:
        pre_func(req)

    resp = agent.execute(req)
    if post_func is not None:
        insp = inspect.getargspec(post_func)
        if len(insp.args) == 3:
            post_func(req, resp, valid_resp)
        else:
            post_func(req, resp)

    if diff:
        del resp["id"]
        del resp["time"]

        diff_dict(valid_resp, JsonObject.unwrap(resp))
        assert_equals(valid_resp, JsonObject.unwrap(resp))

    return req, resp
示例#10
0
def event_test(agent, name, pre_func=None, post_func=None, diff=True):
    req = json_data(name)
    valid_resp_file = json_data(name + '_resp')
    valid_resp = JsonObject.unwrap(valid_resp_file)

    if pre_func is not None:
        pre_func(req)

    resp = agent.execute(req)
    if post_func is not None:
        insp = inspect.getargspec(post_func)
        if len(insp.args) == 3:
            post_func(req, resp, valid_resp)
        else:
            post_func(req, resp)

    if diff:
        del resp["id"]
        del resp["time"]

        diff_dict(valid_resp, JsonObject.unwrap(resp))
        assert_equals(valid_resp, JsonObject.unwrap(resp))

    return req, resp
示例#11
0
    def _create_container(self, client, create_config, image_tag, instance,
                          name, progress):
        container = self.get_container(client, instance)
        if container is None:
            log.info('Creating docker container [%s] from config %s', name,
                     create_config)

            labels = create_config['labels']
            if labels.get('io.rancher.container.pull_image', None) == 'always':
                self._do_instance_pull(
                    JsonObject({
                        'image': instance.image,
                        'tag': None,
                        'mode': 'all',
                        'complete': False,
                    }), progress)
            try:
                del create_config['name']
                command = ''
                try:
                    command = create_config['command']
                    del create_config['command']
                except KeyError:
                    pass
                config = client.create_container_config(
                    image_tag, command, **create_config)
                try:
                    id = instance.data
                    config['VolumeDriver'] = id.fields['volumeDriver']
                except (KeyError, AttributeError):
                    pass
                container = client.create_container_from_config(config, name)
            except APIError as e:
                if e.message.response.status_code == 404:
                    pull_image(instance.image, progress)
                    container = client.create_container_from_config(
                        config, name)
                else:
                    raise
        return container
示例#12
0
    def _setup_logging(self, start_config, instance):
        try:
            if start_config.get('log_config', None) is None:
                return

            type = start_config['log_config']['driver']
            del start_config['log_config']['driver']
            start_config['log_config']['type'] = type
        except (KeyError, AttributeError):
            pass

        for i in ['type', 'config']:
            bad = True
            try:
                obj = start_config['log_config'][i]
                if obj is not None:
                    bad = False
                    start_config['log_config'][i] = JsonObject.unwrap(obj)
            except (KeyError, AttributeError):
                pass
            if bad and 'log_config' in start_config:
                del start_config['log_config']
示例#13
0
    def _setup_logging(self, start_config, instance):
        try:
            if start_config.get('log_config', None) is None:
                return

            type = start_config['log_config']['driver']
            del start_config['log_config']['driver']
            start_config['log_config']['type'] = type
        except (KeyError, AttributeError):
            pass

        for i in ['type', 'config']:
            bad = True
            try:
                obj = start_config['log_config'][i]
                if obj is not None:
                    bad = False
                    start_config['log_config'][i] = JsonObject.unwrap(obj)
            except (KeyError, AttributeError):
                pass
            if bad and 'log_config' in start_config:
                del start_config['log_config']
示例#14
0
 def from_string(self, string):
     obj = json.loads(string)
     return JsonObject(obj)
示例#15
0
 def to_string(self, obj):
     obj = JsonObject.unwrap(obj)
     return json.dumps(obj)