def _ping_cluster(self):
        if tendrl_ns.tendrl_context.fsid:
            cluster_data = ceph.heartbeat(tendrl_ns.tendrl_context.fsid)
            tendrl_ns.tendrl_context.fsid = self.fsid = cluster_data['fsid']
        else:
            cluster_data = ceph.heartbeat()
            if cluster_data:
                if "fsid" in cluster_data:
                    tendrl_ns.tendrl_context.fsid = self.fsid = cluster_data[
                        'fsid']
                    tendrl_ns.tendrl_context.create_local_fsid()

        tendrl_ns.tendrl_context.name = self.name = cluster_data['name']
Beispiel #2
0
    def _ping_cluster(self):
        if hasattr(NS, "tendrl_context.cluster_id"):
            cluster_data = ceph.heartbeat(NS.tendrl_context.cluster_id)
            NS.tendrl_context.cluster_id = self.fsid = cluster_data['fsid']
        else:
            cluster_data = ceph.heartbeat()
            if cluster_data:
                if "fsid" in cluster_data:
                    NS.tendrl_context.cluster_id = self.fsid = cluster_data[
                        'fsid']

        NS.tendrl_context.cluster_name = self.name = cluster_data['name']
        NS.tendrl_context.save()
Beispiel #3
0
    def _ping_cluster(self):
        NS.tendrl_context = NS.tendrl_context.load()
        NS.node_context = NS.node_context.load()
        if NS.tendrl_context.cluster_id:
            cluster_data = ceph.heartbeat(NS.tendrl_context.cluster_id)
            NS.tendrl_context.cluster_id = self.fsid = cluster_data['fsid']
        else:
            cluster_data = ceph.heartbeat()
            if cluster_data:
                if "fsid" in cluster_data:
                    NS.tendrl_context.cluster_id = self.fsid = \
                        cluster_data['fsid']

        NS.tendrl_context.cluster_name = self.name = cluster_data['name']
        NS.tendrl_context.save()
Beispiel #4
0
    def _run(self):
        LOG.info("%s running" % self.__class__.__name__)

        while not self._complete.is_set():
            data = ceph.heartbeat(heartbeat_type="cluster", discover=True)
            if data is not None:
                for tag, cluster_data in data.iteritems():
                    try:
                        if tag.startswith("ceph/cluster/"):
                            if not cluster_data[
                                    'fsid'] in self._manager.clusters:
                                self._manager.on_discovery(cluster_data)
                            else:
                                LOG.debug("%s: heartbeat from existing"
                                          " cluster %s" %
                                          (self.__class__.__name__,
                                           cluster_data['fsid']))
                        else:
                            # This does not concern us, ignore it
                            LOG.debug("TopLevelEvents: ignoring %s" % tag)
                            pass
                    except Exception:
                        LOG.exception("Exception handling message tag=%s" %
                                      tag)
            gevent.sleep(3)

        LOG.info("%s complete" % self.__class__.__name__)
Beispiel #5
0
    def _run(self):

        self._ready.set()
        LOG.debug("ClusterMonitor._run: ready")

        while not self._complete.is_set():

            data = ceph.heartbeat(heartbeat_type="cluster", fsid=self.fsid)

            if data is not None:
                for tag, c_data in data.iteritems():
                    LOG.debug(
                        "ClusterMonitor._run.ev:"
                        " %s/tag=%s" % (
                            c_data['id'] if 'id' in c_data else None, tag)
                    )

                try:
                    if tag.startswith("ceph/cluster/{0}".format(self.fsid)):
                        # A ceph.heartbeat beacon
                        self.on_heartbeat(c_data['id'], c_data)
                    else:
                        # This does not concern us, ignore it
                        pass
                except Exception:
                    # Because this is our main event handling loop, swallow
                    # exceptions instead of letting them end the world.
                    LOG.exception(
                        "Exception handling message with tag %s" % tag)
                    LOG.debug("Message content: %s" % data)
            gevent.sleep(4)

        LOG.info("%s complete" % self.__class__.__name__)
        self.done.set()
Beispiel #6
0
    def _run(self):
        Event(
            Message(
                priority="info",
                publisher=NS.publisher_id,
                payload={"message": "%s running" % self.__class__.__name__}))

        # Check if monitor key exists, if not sync
        try:
            NS._int.client.read("clusters/%s/_mon_key" %
                                NS.tendrl_context.integration_id)
        except etcd.EtcdKeyNotFound:
            out, err, rc = cmd_utils.Command(
                "ceph auth get mon. --cluster %s" %
                NS.tendrl_context.cluster_name).run()

            if rc != 0:
                Event(
                    Message(priority="debug",
                            publisher=NS.publisher_id,
                            payload={
                                "message":
                                "Couldn't get monitor key. Error:%s" % err
                            }))
            else:
                if out and out != "":
                    mon_sec = out.split('\n')[1].strip().split(
                        ' = ')[1].strip()
                    NS._int.wclient.write(
                        "clusters/%s/_mon_key" %
                        NS.tendrl_context.integration_id, mon_sec)

        while not self._complete.is_set():
            gevent.sleep(int(NS.config.data.get("sync_interval", 10)))
            try:
                NS._int.wclient.write("clusters/%s/sync_status" %
                                      NS.tendrl_context.integration_id,
                                      "in_progress",
                                      prevExist=False)
            except (etcd.EtcdAlreadyExist, etcd.EtcdCompareFailed) as ex:
                pass

            cluster_data = ceph.heartbeat(NS.tendrl_context.cluster_id)

            self.on_heartbeat(cluster_data)

            _cluster = NS.tendrl.objects.Cluster(
                integration_id=NS.tendrl_context.integration_id)
            if _cluster.exists():
                _cluster.sync_status = "done"
                _cluster.last_sync = str(now())
                _cluster.save()
        Event(
            Message(
                priority="info",
                publisher=NS.publisher_id,
                payload={"message": "%s complete" % self.__class__.__name__}))
    def _run(self):
        LOG.info("%s running" % self.__class__.__name__)

        while not self._complete.is_set():
            gevent.sleep(3)
            cluster_data = ceph.heartbeat(tendrl_ns.tendrl_context.fsid)

            self.on_heartbeat(cluster_data)

        LOG.info("%s complete" % self.__class__.__name__)
Beispiel #8
0
    def _run(self):
        Event(
            Message(
                priority="info",
                publisher=NS.publisher_id,
                payload={"message": "%s running" % self.__class__.__name__}))

        while not self._complete.is_set():
            gevent.sleep(3)
            cluster_data = ceph.heartbeat(NS.tendrl_context.cluster_id)

            self.on_heartbeat(cluster_data)

        Event(
            Message(
                priority="info",
                publisher=NS.publisher_id,
                payload={"message": "%s complete" % self.__class__.__name__}))
Beispiel #9
0
    def _run(self):
        LOG.info("Starting %s" % self.__class__.__name__)

        while not self._complete.is_set():
            data = ceph.heartbeat()
            if data is not None:
                for tag, s_data in data.iteritems():
                    if tag.startswith("ceph/server"):
                        LOG.debug("ServerMonitor got ceph/server message")
                        try:
                            self.on_server_heartbeat(s_data['id'], s_data)
                        except Exception:
                            LOG.debug("Message detail: %s" %
                                      json.dumps(s_data))
                            LOG.exception("Error handling ceph/server"
                                          " message from %s" % s_data['id'])
            gevent.sleep(10)

        LOG.info("Completed %s" % self.__class__.__name__)