| | |
| | | "io/ioutil" |
| | | "net" |
| | | "os" |
| | | "strconv" |
| | | |
| | | //"os" |
| | | "strings" |
| | |
| | | } |
| | | |
| | | //Init serf Init |
| | | func Init(clusterID string, password string, nodeID string, ips []string) (*Agent, error) { |
| | | func Init(clusterID string, password string, nodeID string, addrs []string) (*Agent, error) { |
| | | agent, err := InitNode(clusterID, password, nodeID) |
| | | if err != nil { |
| | | fmt.Printf("InitNode failed, error: %s", err) |
| | | return agent, err |
| | | } |
| | | |
| | | err = agent.JoinByNodeIP(ips) |
| | | err = agent.JoinByNodeAddrs(addrs) |
| | | if err != nil { |
| | | fmt.Printf("JoinByNodeIP failed, error: %s", err) |
| | | return agent, err |
| | |
| | | return agent, nil |
| | | } |
| | | |
| | | func (a *Agent) JoinByNodeAddrs(addrs []string) error { |
| | | var nodes []string |
| | | |
| | | if len(addrs) == 0 { |
| | | return fmt.Errorf("No Nodes To Join!") |
| | | } |
| | | for _, addr := range addrs { |
| | | nodes = append(nodes, addr) |
| | | } |
| | | |
| | | a.Agent.Join(nodes, true) |
| | | |
| | | return nil |
| | | } |
| | | |
| | | func (a *Agent) JoinByNodeIP(ips []string) error { |
| | | var nodes []string |
| | | |
| | |
| | | |
| | | n, err := a.Agent.Join(nodes, true) |
| | | if err != nil || n == 0 { |
| | | //a.Stop() |
| | | //fmt.Println("Stop node") |
| | | return fmt.Errorf("Error Encrypt Key!") |
| | | } |
| | | |
| | | return err |
| | | } |
| | | |
| | | type Node struct { |
| | | clusterID string |
| | | NodeID string |
| | | IP string |
| | | isAlive int //StatusNone:0, StatusAlive:1, StatusLeaving:2, StatusLeft:3, StatusFailed:4 |
| | | } |
| | | |
| | | func (a *Agent) GetNodes() (nodes []Node) { |
| | | var node Node |
| | | func (a *Agent) GetNodes() (nodes []NodeInfo) { |
| | | var node NodeInfo |
| | | fmt.Println("a.conf.ClusterID:", a.conf.ClusterID) |
| | | mbs := a.GroupMembers(a.conf.ClusterID) |
| | | for _, mb := range mbs { |
| | | node.NodeID = mb.Name |
| | | node.IP = mb.Addr.String() |
| | | node.isAlive = int(mb.Status) |
| | | node.clusterID = mb.Tags[tagKeyClusterID] |
| | | node.NodeAddress = mb.Addr.String() + ":" + strconv.Itoa(int(mb.Port)) |
| | | node.IsAlive = int(mb.Status) |
| | | node.ClusterID = mb.Tags[tagKeyClusterID] |
| | | |
| | | nodes = append(nodes, node) |
| | | } |