Esempio n. 1
0
 def _nfs_status_online(self, pool, poolArgs=None):
     if not poolArgs:
         xml = pool.XMLDesc(0)
         pool_type = xpath_get_text(xml, "/pool/@type")[0]
         source = self._get_storage_source(pool_type, xml)
         poolArgs = {}
         poolArgs["name"] = pool.name()
         poolArgs["type"] = pool_type
         poolArgs["source"] = {"path": source["path"], "host": source["addr"]}
     conn = self.conn.get()
     poolDef = StoragePoolDef.create(poolArgs)
     try:
         poolDef.prepare(conn)
         return True
     except Exception:
         return False
Esempio n. 2
0
 def _nfs_status_online(self, pool, poolArgs=None):
     if not poolArgs:
         xml = pool.XMLDesc(0)
         pool_type = xpath_get_text(xml, "/pool/@type")[0]
         source = self._get_storage_source(pool_type, xml)
         poolArgs = {}
         poolArgs['name'] = pool.name()
         poolArgs['type'] = pool_type
         poolArgs['source'] = {'path': source['path'],
                               'host': source['addr']}
     conn = self.conn.get()
     poolDef = StoragePoolDef.create(poolArgs)
     try:
         poolDef.prepare(conn)
         return True
     except Exception:
         return False
Esempio n. 3
0
    def create(self, params):
        task_id = None
        conn = self.conn.get()
        try:
            name = params['name']
            if name == ISO_POOL_NAME:
                raise InvalidOperation("KCHPOOL0031E")

            # The user may want to create a logical pool with the same name
            # used before but a volume group will already exist with this name
            # So check the volume group does not exist to create the pool
            if params['type'] == 'logical':
                vgdisplay_cmd = ['vgdisplay', name.encode('utf-8')]
                output, error, returncode = run_command(vgdisplay_cmd)
                # From vgdisplay error codes:
                # 1  error reading VGDA
                # 2  volume group doesn't exist
                # 3  not all physical volumes of volume group online
                # 4  volume group not found
                # 5  no volume groups found at all
                # 6  error reading VGDA from lvmtab
                if returncode not in [2, 4, 5]:
                    raise InvalidOperation("KCHPOOL0036E", {'name': name})

            if params['type'] == 'kimchi-iso':
                task_id = self._do_deep_scan(params)

            if params['type'] == 'scsi':
                adapter_name = params['source']['adapter_name']
                extra_params = self.device.lookup(adapter_name)
                # Adds name, adapter_type, wwpn and wwnn to source information
                params['source'].update(extra_params)
                params['fc_host_support'] = self.caps.fc_host_support

            poolDef = StoragePoolDef.create(params)
            poolDef.prepare(conn)
            xml = poolDef.xml.encode("utf-8")
        except KeyError, item:
            raise MissingParameter("KCHPOOL0004E",
                                   {'item': str(item), 'name': name})
Esempio n. 4
0
    def create(self, params):
        task_id = None
        conn = self.conn.get()
        try:
            name = params["name"]
            if name == ISO_POOL_NAME:
                raise InvalidOperation("KCHPOOL0031E")

            # The user may want to create a logical pool with the same name
            # used before but a volume group will already exist with this name
            # So check the volume group does not exist to create the pool
            if params["type"] == "logical":
                vgdisplay_cmd = ["vgdisplay", name.encode("utf-8")]
                output, error, returncode = run_command(vgdisplay_cmd)
                # From vgdisplay error codes:
                # 1  error reading VGDA
                # 2  volume group doesn't exist
                # 3  not all physical volumes of volume group online
                # 4  volume group not found
                # 5  no volume groups found at all
                # 6  error reading VGDA from lvmtab
                if returncode not in [2, 4, 5]:
                    raise InvalidOperation("KCHPOOL0036E", {"name": name})

            if params["type"] == "kimchi-iso":
                task_id = self._do_deep_scan(params)

            if params["type"] == "scsi":
                adapter_name = params["source"]["adapter_name"]
                extra_params = self.device.lookup(adapter_name)
                # Adds name, adapter_type, wwpn and wwnn to source information
                params["source"].update(extra_params)
                params["fc_host_support"] = self.caps.fc_host_support

            poolDef = StoragePoolDef.create(params)
            poolDef.prepare(conn)
            xml = poolDef.xml.encode("utf-8")
        except KeyError, item:
            raise MissingParameter("KCHPOOL0004E", {"item": str(item), "name": name})