package etcd // //import ( // "apsClient/conf" // "context" // "fmt" // "go.etcd.io/etcd/client/pkg/v3/transport" // "log" // "net" // "time" // // clientv3 "go.etcd.io/etcd/client/v3" //) // //// ServiceRegister 创建租约注册服务 //type ServiceRegister struct { // cli *clientv3.Client // etcd v3 client // leaseID clientv3.LeaseID // 租约ID // keepAliveChan <-chan *clientv3.LeaseKeepAliveResponse // 租约keepalieve相应chan // key string // key // val string // value //} // //// NewServiceRegister 新建注册服务 //func NewServiceRegister(endpoints []string, key, val string, lease int64, dailTimeout int) error { // // // todo 证书 // tlsInfo := transport.TLSInfo{ // TrustedCAFile: conf.Conf.Etcd.Tls.CaFile, // CertFile: conf.Conf.Etcd.Tls.CertFile, // KeyFile: conf.Conf.Etcd.Tls.KeyFile, // } // // tlsConfig, err := tlsInfo.ClientConfig() // // if err != nil { // fmt.Printf("tlsconfig failed, err:%v\n", err) // } // // cli, err := clientv3.New(clientv3.Config{ // Endpoints: endpoints, // DialTimeout: time.Duration(dailTimeout) * time.Second, // TLS: tlsConfig, // }) // // defer func(cli *clientv3.Client) { // err := cli.Close() // if err != nil { // // } // }(cli) // log.Printf("44444444444444444 %v", endpoints) // // if err != nil { // return err // } // // // put // ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) // _, err = cli.Put(ctx, key, val) // cancel() // if err != nil { // fmt.Printf("put to etcd failed, err:%v\n", err) // return err // } // // //ser := &ServiceRegister{ // // cli: cli, // // key: key, // // val: val, // //} // // // //log.Printf("55555555555555555555555 %v", ser) // //申请租约设置时间keepalive // //if err := ser.putKeyWithLease(lease); err != nil { // // return nil, err // //} // // return err //} // //// 设置租约 //func (s *ServiceRegister) putKeyWithLease(lease int64) error { // // 创建一个新的租约,并设置ttl时间 // resp, err := s.cli.Grant(context.Background(), lease) // if err != nil { // return err // } // log.Printf("666666666666666 %v", resp) // // // 注册服务并绑定租约 // _, err = s.cli.Put(context.Background(), s.key, s.val, clientv3.WithLease(resp.ID)) // if err != nil { // return err // } // // // 设置续租 定期发送需求请求 // // KeepAlive使给定的租约永远有效。 如果发布到通道的keepalive响应没有立即被使用, // // 则租约客户端将至少每秒钟继续向etcd服务器发送保持活动请求,直到获取最新的响应为止。 // // etcd client会自动发送ttl到etcd server,从而保证该租约一直有效 // leaseRespChan, err := s.cli.KeepAlive(context.Background(), resp.ID) // if err != nil { // return err // } // log.Printf("777777777777777777 %v", leaseRespChan) // // s.leaseID = resp.ID // s.keepAliveChan = leaseRespChan // // return nil //} // //// ListenLeaseRespChan 监听 续租情况 //func (s *ServiceRegister) ListenLeaseRespChan() { // for _ = range s.keepAliveChan { // } // // //for leaseKeepResp := range s.keepAliveChan { // // fmt.Println("续约成功", leaseKeepResp) // //} // // //fmt.Println("关闭续租") //} // //// Close 注销服务 //func (s *ServiceRegister) Close() error { // // 撤销租约 // if _, err := s.cli.Revoke(context.Background(), s.leaseID); err != nil { // return err // } // // //fmt.Println("撤销租约") // return s.cli.Close() //} // //// GetServeAddr 获取本机地址 //func GetServeAddr(addr string) (string, error) { // conn, err := net.Dial("udp", addr) // if err != nil { // return "", err // } // // conn.Close() // // localAddr := conn.LocalAddr().(*net.UDPAddr) // //ip := strings.Split(localAddr.String(), ":")[0] // // fmt.Println("++++++++ ip: ", localAddr.IP.String()) // return localAddr.IP.String(), nil //} // //func SetEtcdData(key string, value string) { // cli, err := clientv3.New(clientv3.Config{ // Endpoints: []string{"192.168.20.119:2379"}, // DialTimeout: 5 * time.Second, // }) // if err != nil { // // handle error! // fmt.Printf("connect to etcd failed, err:%v\n", err) // return // } // fmt.Println("connect to etcd success") // defer cli.Close() // // put // ctx, cancel := context.WithTimeout(context.Background(), time.Second) // _, err = cli.Put(ctx, key, value) // cancel() // if err != nil { // fmt.Printf("put to etcd failed, err:%v\n", err) // return // } //} // ////func GetETCDLeaderEndpoint() (string, error) { //// // 获取kubeconfig配置文件路径 //// clientset, err := util.GetClient() //// if err != nil { //// return "", err //// } //// //// // 获取ETCD主节点的地址 //// pods, err := clientset.CoreV1().Pods("kube-system").List(context.TODO(), metav1.ListOptions{ //// LabelSelector: "component=etcd", //// }) //// if err != nil { //// return "", err //// } //// //// if len(pods.Items) == 0 { //// return "", fmt.Errorf("no ETCD pods found") //// } //// //// leaderEndpoint := pods.Items[0].Status.PodIP + ":2379" //// return leaderEndpoint, nil ////}