def etcd_service_start_force(cls): cls._etcd_service_trystart() if cls._etcd_check_running(): _sysinfo("etcd service start ok!") return if cls._etcd_check_removed(): #try to run as proxy mode _syswarn("etcd was removed, try start as proxy mode !") cls._etcd_try_start_as_proxy() _syswarn("etcd was removed, start as proxy mode ok !") else: raise Exp(errno.EPERM, "etcd service start fail, please check it!")
class Etcd_manage(object): def __init__(self): self.config = Config() pass def member_add(self, hosts): origin_cluster_list = self._etcd_get_init_cluster().keys() new_cluster_list = origin_cluster_list add_list = [] for host in hosts.split(','): if host in new_cluster_list: _dwarn("host:%s is already in etcd cluster, please check it!" % (host)) continue else: # add etcd member one by one self._etcd_health_wait() self._etcd_add_member(host) new_cluster_list.append(host) try: cmd = "python %s/app/admin/node.py etcd --state %s --hosts %s" % (self.config.home, "existing", ','.join(new_cluster_list)) self._exec_node(host, cmd) except Exp, e: self._etcd_del_member(host) _syserror("etcd set conf on host:%s fail, errmsg:%s" % (host, e.err)) raise Exp(e.errno, "etcd set conf on host:%s fail, errmsg:%s" % (host, e.err)) _sysinfo("etcd member add hosts:%s ok !" % (host)) print "member add hosts:%s ok !" % (hosts)
def member_del(self, hosts, proxy=False): origin_cluster_list = self._etcd_get_init_cluster().keys() del_list = hosts.split(',') new_cluster_list = origin_cluster_list new_del_list = [] for host in del_list: if host not in new_cluster_list: _dwarn("host:%s is not in etcd cluster, please check it!" % (host)) del_list.remove(host) continue else: #etcd member remove host new_cluster_list.remove(host) for host in del_list: if len(host) == 0: continue _dmsg("wait etcd for health, host:%s" % (host)) self._etcd_health_wait() _dmsg("etcd is health, begin check is permit to remove... host:%s" % (host)) if not self.etcd_check_member_remove_permition(host): _dwarn("host:%s not permit to remove. pelease check it!\n" % (host)) new_cluster_list.append(host) continue _dmsg("host:%s permit to remove, begin remove..." % (host)) try: cmd = "etcdctl member list | grep %s | awk '{print $1}' | awk -F':' '{print $1}'| awk -F'[' '{print $1}'| xargs etcdctl member remove" % (host) self._exec_node(new_cluster_list[0], cmd) _sysinfo("etcd member remove %s ok !" % (host)) new_del_list.append(host) except Exp, e: _syserror("etcd member remove %s fail ! errmsg:%s" % (host, e.err)) raise Exp(errno.EPERM, "etcd member remove %s fail, %s" % (host, e.err))
try: cmd = "etcdctl member list | grep %s | awk '{print $1}' | awk -F':' '{print $1}'| awk -F'[' '{print $1}'| xargs etcdctl member remove" % (host) self._exec_node(new_cluster_list[0], cmd) _sysinfo("etcd member remove %s ok !" % (host)) new_del_list.append(host) except Exp, e: _syserror("etcd member remove %s fail ! errmsg:%s" % (host, e.err)) raise Exp(errno.EPERM, "etcd member remove %s fail, %s" % (host, e.err)) if proxy and len(new_del_list) > 0: #set hosts run as proxy mode cmd = "python %s/app/admin/node.py etcd --state %s --hosts %s" % (self.config.home, "existing", ','.join(new_cluster_list)) args = [[x, cmd] for x in del_list] mutil_exec(self._exec_node, args) _sysinfo("etcd member remove %s ok , new_cluster_list:%s!" % (del_list, new_cluster_list)) print "member del hosts:%s ok !" % (new_del_list) def member_list(self): _etcd_cluster = self._etcd_get_init_cluster() for host in _etcd_cluster.keys(): if _etcd_cluster[host] == "true": print "%s : leader" % (host) else: print "%s" % (host) def create_cluster(self, hosts, proxy_nodes=None): cluster_list = hosts.split(',') proxy_list = []