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  }