Esempio n. 1
0
    def _api_rsc_auto_delete(self, rsc_name):
        with lin_drv(self.default_uri) as lin:
            if not lin.connected:
                lin.connect()

            rsc = linstor.Resource(str(rsc_name), self.default_uri)
            return rsc.delete()
Esempio n. 2
0
    def _api_rsc_is_diskless(self, rsc_name):
        with lin_drv(self.default_uri) as lin:
            if not lin.connected:
                lin.connect()

            rsc = linstor.Resource(str(rsc_name))
            return rsc.is_diskless(self.host_name)
Esempio n. 3
0
    def destroy(self, dbg, sr, key):
        cfg = ConfigHelper._get_config()

        res = linstor.Resource(key, cfg.controller)
        res.delete()

        meta = {'key': key}
        SRHelper.delete_volume(sr, meta)
Esempio n. 4
0
    def close(self, dbg, uri):
        node_name = self._get_node(uri)
        res_name = self._get_res(uri)
        controller = self._get_controller(uri)

        res = linstor.Resource(res_name, controller)
        res.deactivate(node_name)
        return None
Esempio n. 5
0
    def _api_rsc_autoplace(self, rsc_name):
        with lin_drv(self.default_uri) as lin:
            if not lin.connected:
                lin.connect()

            new_rsc = linstor.Resource(name=rsc_name, uri=self.default_uri)
            new_rsc.placement.redundancy = self.ap_count
            new_rsc.placement.storage_pool = self.default_pool
            rsc_reply = new_rsc.autoplace()

            return rsc_reply
Esempio n. 6
0
    def attach(self, dbg, uri, domain):
        res_name = self._get_res(uri)
        controller = self._get_controller(uri)

        res = linstor.Resource(res_name, controller)
        return {
            'implementations':
            [['BlockDevice', {
                'path': res.volumes[0].device_path
            }]],
        }
Esempio n. 7
0
    def open(self, dbg, uri, persistent):
        node_name = self._get_node(uri)
        res_name = self._get_res(uri)
        controller = self._get_controller(uri)

        res = linstor.Resource(res_name, controller)
        # in linstor we call that step activate, that is fine, see comment in self.activate()
        res.activate(node_name)

        # raise xapi.storage.api.v5.volume.Volume_does_not_exist(u.path)
        return None
Esempio n. 8
0
    def _api_rsc_size(self, rsc_name):
        with lin_drv(self.default_uri) as lin:
            if not lin.connected:
                lin.connect()

            rsc = linstor.Resource(str(rsc_name))
            if len(rsc.volumes):
                if "size" in rsc.volumes:
                    return rsc.volumes[0].size
                else:
                    return 0
            else:
                return 0
Esempio n. 9
0
    def resize(self, dbg, sr, key, new_size):
        new_size = int(new_size)
        current_size = self._current_size(key)

        if new_size == current_size:
            return
        if new_size < current_size:
            # Raise SMAPIv1 error VDISize
            raise xapi.XenAPIException(
                "SR_BACKEND_FAILURE_79",
                ["VDI Invalid size", "shrinking not allowed"])
        cfg = ConfigHelper._get_config()
        res = linstor.Resource(key, cfg.controller)
        res.volumes[0].size = current_size
Esempio n. 10
0
    def create(self, dbg, sr, name, description, size, sharable):
        # [djs55/xapi-storage#33]
        size = int(size)  # bytes

        size = max(size, 4 * 1024 * 1024)  # we have am 4M lower limit

        uuid_ = str(uuid.uuid4())
        hostname = socket.gethostname()

        cfg = ConfigHelper._get_config()

        res = linstor.Resource(name, cfg.controller)
        res.volumes[0] = linstor.Volume(size)
        res.placement.redundancy = cfg.redundancy
        res.autoplace()

        controller = cfg.controller[len('linstor://'):]
        stat = {
            "key":
            name,
            "uuid":
            uuid_,
            "name":
            name,
            "sr":
            sr,
            "description":
            description,
            "read_write":
            True,
            "sharable":
            sharable,
            "virtual_size":
            size,
            "physical_utilisation":
            0,
            "uri": [
                '{}://{}/{};controller={}'.format(SCHEME, hostname, name,
                                                  controller)
            ],
            "keys": {},
        }

        SRHelper.add_volume(sr, stat)

        return stat
Esempio n. 11
0
    def _api_snapshot_resource_restore(self, src_rsc_name, src_snap_name,
                                       new_vol_name):

        lin = linstor.Resource(src_rsc_name, uri=self.default_uri)
        new_rsc = lin.restore_from_snapshot(src_snap_name, new_vol_name)

        # Adds an aux/property KV for synchronous return from snapshot restore
        with lin_drv(self.default_uri) as lin:
            if not lin.connected:
                lin.connect()

            aux_prop = {}
            aux_prop["Aux/restore"] = "done"
            lin.volume_dfn_modify(rsc_name=new_vol_name,
                                  volume_nr=0,
                                  set_properties=aux_prop)

        if new_rsc.name == new_vol_name:
            return True
        return False
Esempio n. 12
0
 def _current_size(cls, res_name):
     cfg = ConfigHelper._get_config()
     res = linstor.Resource(res_name, cfg.controller)
     return res.volumes[0].size
Esempio n. 13
0
 def _api_snapshot_delete(self, drbd_rsc_name, snapshot_name):
     lin = linstor.Resource(drbd_rsc_name, uri=self.default_uri)
     snap_reply = lin.snapshot_delete(snapshot_name)
     return snap_reply