github.com/fanux/shipyard@v0.0.0-20161009071005-6515ce223235/controller/manager/utils.go (about) 1 package manager 2 3 import ( 4 "crypto/sha256" 5 "crypto/tls" 6 "crypto/x509" 7 "encoding/hex" 8 "strings" 9 "time" 10 11 "github.com/shipyard/shipyard" 12 ) 13 14 func getTLSConfig(caCert, sslCert, sslKey []byte) (*tls.Config, error) { 15 // TLS config 16 var tlsConfig tls.Config 17 tlsConfig.InsecureSkipVerify = true 18 certPool := x509.NewCertPool() 19 20 certPool.AppendCertsFromPEM(caCert) 21 tlsConfig.RootCAs = certPool 22 cert, err := tls.X509KeyPair(sslCert, sslKey) 23 if err != nil { 24 return &tlsConfig, err 25 } 26 tlsConfig.Certificates = []tls.Certificate{cert} 27 28 return &tlsConfig, nil 29 } 30 31 func generateId(n int) string { 32 hash := sha256.New() 33 hash.Write([]byte(time.Now().String())) 34 md := hash.Sum(nil) 35 mdStr := hex.EncodeToString(md) 36 return mdStr[:n] 37 } 38 39 func parseClusterNodes(driverStatus [][]string) ([]*shipyard.Node, error) { 40 nodes := []*shipyard.Node{} 41 var node *shipyard.Node 42 nodeComplete := false 43 name := "" 44 addr := "" 45 containers := "" 46 reservedCPUs := "" 47 reservedMemory := "" 48 labels := []string{} 49 for _, l := range driverStatus { 50 if len(l) != 2 { 51 continue 52 } 53 label := l[0] 54 data := l[1] 55 56 // cluster info label i.e. "Filters" or "Strategy" 57 if strings.Index(label, "\u0008") > -1 { 58 continue 59 } 60 61 if strings.Index(label, " └") == -1 { 62 name = label 63 addr = data 64 } 65 66 // node info like "Containers" 67 switch label { 68 case " └ Containers": 69 containers = data 70 case " └ Reserved CPUs": 71 reservedCPUs = data 72 case " └ Reserved Memory": 73 reservedMemory = data 74 case " └ Labels": 75 lbls := strings.Split(data, ",") 76 labels = lbls 77 nodeComplete = true 78 default: 79 continue 80 } 81 82 if nodeComplete { 83 node = &shipyard.Node{ 84 Name: name, 85 Addr: addr, 86 Containers: containers, 87 ReservedCPUs: reservedCPUs, 88 ReservedMemory: reservedMemory, 89 Labels: labels, 90 } 91 nodes = append(nodes, node) 92 93 // reset info 94 name = "" 95 addr = "" 96 containers = "" 97 reservedCPUs = "" 98 reservedMemory = "" 99 labels = []string{} 100 nodeComplete = false 101 } 102 } 103 104 return nodes, nil 105 }