def Start(self): while True: try: self.pods = self.kube.GetPods() exists = self.CheckForPrimaryMongo() if exists == True: print( 'Watcher.CheckForPrimaryMongo: PRIMARY ALREADY IN REPLICASET' ) self.primary = False elif exists == False: member = Member(_id=None, IP='127.0.0.1', priority=None) alive = member.CheckIfAlive() if alive == True: primary = member.CheckIfPodIsPrimary() if primary == True: self.primary = True print( 'Watcher.CheckForPrimaryMongo: POD IS PRIMARY') elif primary == False: print( 'Watcher.CheckForPrimaryMongo: NO PRIMARY IN REPLICASET' ) self.mongo.HoldElection(self) if self.primary == True: self.CheckCurrentMongoPods() time.sleep(5) except Exception as error: print('Watcher.Start: ERROR - {}'.format(error)) time.sleep(5)
def _getCurrentMembers(self): try: conf = self.db.admin.command('replSetGetConfig', 1) for member in conf["conf"]['members']: newMember = Member( member['_id'], member['host'].split(':')[0], # Get Host IP member['priority']) state = newMember.CheckIfAlive() if state == True: self.members.append(newMember) print('Members._getCurrentMembers: {}'.format(self.members)) except Exception as error: print('Members._getCurrentMembers: WARN {}'.format(error))
def CheckForPrimaryMongo(self): try: exists = False for pod in self.pods.items: if pod.status.pod_ip != None: if pod.status.phase.lower() == 'running': if self.sidecarIP != pod.status.pod_ip: member = Member(_id=None, IP=pod.status.pod_ip, priority=None) alive = member.CheckIfAlive() if alive == True: primary = member.CheckIfPrimary() if primary == True: return True return False except Exception as error: print('Watcher.CheckForPrimaryMongo: ERROR - {}'.format(error))
def AddMember(self, IP): try: print('Members.AddMember: ATTEMPTING TO ADD {}'.format(IP)) memberIDs = [] newID = 0 for member in self.members: memberIDs.append(member._id) for i in range(0, 255): if i not in memberIDs: newID = i newMember = Member(_id=newID, IP=IP, priority=0.5) state = newMember.CheckIfAlive() if state == True: self.members.append(newMember) print('Members.AddMember: ADD {}'.format(IP)) return True else: print('Members.AddMember: FAILED TO ADD {}'.format(IP)) return False except Exception as error: print('Members.AddMember: ERROR\t{}'.format(error))