示例#1
0
 def defaults_refresh(self):
     # Default cluster name / uuid values
     if self.model.cluster_name is None and self.model.cluster_uuid is None:
         self.model.cluster_name = "ceph"
     if self.model.cluster_name is not None and self.model.cluster_uuid is None:
         self.model.cluster_uuid = utils._get_cluster_uuid_from_name(self.model.cluster_name)
     if self.model.cluster_name is None and self.model.cluster_uuid is not None:
         self.model.cluster_name = utils._get_cluster_name_from_uuid(self.model.cluster_uuid)
 def defaults_refresh(self):
     # Default cluster name / uuid values
     if self.model.cluster_name is None and self.model.cluster_uuid is None:
         log.info("Defaulting cluster name to 'ceph'")
         self.model.cluster_name = "ceph"
     if self.model.cluster_name is not None and self.model.cluster_uuid is None:
         self.model.cluster_uuid = utils._get_cluster_uuid_from_name(self.model.cluster_name)
         log.info("From cluster name '%s' got cluster uuid '%s'" % (self.model.cluster_name, self.model.cluster_uuid))
     if self.model.cluster_name is None and self.model.cluster_uuid is not None:
         self.model.cluster_name = utils._get_cluster_name_from_uuid(self.model.cluster_uuid)
         log.info("From cluster uuid '%s' got cluster name '%s'" % (self.model.cluster_uuid, self.model.cluster_name))
示例#3
0
 def defaults_refresh(self):
     # Default cluster name / uuid values
     if self.model.cluster_name is None and self.model.cluster_uuid is None:
         log.info("Defaulting cluster name to 'ceph'")
         self.model.cluster_name = "ceph"
     if self.model.cluster_name is not None and self.model.cluster_uuid is None:
         self.model.cluster_uuid = utils._get_cluster_uuid_from_name(
             self.model.cluster_name)
         log.info("From cluster name '%s' got cluster uuid '%s'" %
                  (self.model.cluster_name, self.model.cluster_uuid))
     if self.model.cluster_name is None and self.model.cluster_uuid is not None:
         self.model.cluster_name = utils._get_cluster_name_from_uuid(
             self.model.cluster_uuid)
         log.info("From cluster uuid '%s' got cluster name '%s'" %
                  (self.model.cluster_uuid, self.model.cluster_name))
示例#4
0
    def prepare(self, **kwargs):
        osd_dev_raw = kwargs.get("osd_dev")
        journal_dev = kwargs.get("journal_dev")
        cluster_name = kwargs.get("cluster_name")
        cluster_uuid = kwargs.get("cluster_uuid")
        fs_type = kwargs.get("osd_fs_type")
        osd_uuid = kwargs.get("osd_uuid")
        journal_uuid = kwargs.get("journal_uuid")
        # Default cluster name / uuid values
        if cluster_name is None and cluster_uuid is None:
            cluster_name = "ceph"
        if cluster_name is not None and cluster_uuid is None:
            cluster_uuid = utils._get_cluster_uuid_from_name(cluster_name)
        if cluster_name is None and cluster_uuid is not None:
            cluster_name = utils._get_cluster_name_from_uuid(cluster_name)

        fs_type = kwargs.get("fs_type","xfs")
        # Check required variables are set
        if osd_dev_raw is None:
            raise Error("osd_dev not specified")

        # Check boot strap key exists
        bootstrap_path_osd = keyring._get_path_keyring_osd(cluster_name)
        if not os.path.isfile(bootstrap_path_osd):
            raise Error(bootstrap_path_osd)
        if not os.path.isdir(constants._path_ceph_lib_osd):
            log.info("mkdir %s")
            os.makedirs(constants._path_ceph_lib_osd)
        # normalise paths
        osd_dev = os.path.realpath(osd_dev_raw)
        log.debug("Transfromed from '%s' to '%s'" % (osd_dev_raw, osd_dev))
        # get existing state and see if action needed
        u = mdl_updater.model_updater(self.model)
        u.partition_table_refresh()

        # Validate the osd_uuid and journal_uuid dont already exist

        osd_list_existing = self.model.discovered_osd.get(cluster_uuid)
        if osd_list_existing is not None:
            for osd_existing in osd_list_existing:
                if osd_uuid is not None:
                    osd_existing_fsid = osd_existing.get("fsid")
                    if osd_existing_fsid == osd_uuid:
                        log.debug("osd_uuid already exists:%s" % (osd_uuid))
                        return True

                if journal_uuid is not None:
                    journal_existing_uuid = osd_existing.get("journal_uuid")
                    if journal_existing_uuid == journal_uuid:
                        log.debug("journal_uuid already exists:%s" % (journal_uuid))
                        return True
        if self.is_partition(osd_dev):
            if osd_dev in self.model.partitions_journal:
                return True
            partion_details = self._get_part_details(osd_dev)
            osd_mountpoint = partion_details.get("MOUNTPOINT")
            if osd_mountpoint is not None:
                return True
            if journal_dev is None:
                # We could try and default journal_dev if a journel disk is found.
                raise Error("Journel device must be specified")
            self._prepare_check_partition_type_data(osd_dev)
            self._prepare_check_partition_type_journel(journal_dev)
        else:
            # If partions exist on osd_dev disk assume its used
            block_details_osd = self.model.lsblk.get(osd_dev)
            if block_details_osd is None:
                raise Error("Not a block device")
            part_table = block_details_osd.get("PARTITION")
            if part_table is not None:
                if len(part_table.keys()) > 0:
                    return True


        if not constants._path_ceph_disk:
            raise Error("Error 'ceph-disk' command not find")
        arguments = [
            constants._path_ceph_disk,
            '-v',
            'prepare',
            '--fs-type',
            fs_type
            ]
        if osd_dev is not None:
            arguments.append("--data-dev")
        if journal_dev is not None:
            arguments.append("--journal-dev")
        if cluster_name is not None:
            arguments.append("--cluster")
            arguments.append(cluster_name)
        if cluster_uuid is not None:
            arguments.append("--cluster-uuid")
            arguments.append(cluster_uuid)
        if osd_uuid is not None:
            arguments.append("--osd-uuid")
            arguments.append(osd_uuid)
        if journal_uuid is not None:
            arguments.append("--journal-uuid")
            arguments.append(journal_uuid)
        if osd_dev is not None:
            arguments.append(osd_dev)
        if journal_dev is not None:
            arguments.append(journal_dev)
        output = utils.execute_local_command(arguments)
        if output["retcode"] != 0:
            raise Error("Failed executing '%s' Error rc=%s, stdout=%s stderr=%s" % (
                    " ".join(arguments),
                    output["retcode"],
                    output["stdout"],
                    output["stderr"])
                    )
        return True