blob: 5bec7a749505a60f0484aa57fadcdc76287f802c [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package adaptor
import (
"github.com/apache/servicecomb-service-center/pkg/util"
pb "github.com/apache/servicecomb-service-center/server/core/proto"
"github.com/apache/servicecomb-service-center/server/plugin/discovery"
"k8s.io/api/core/v1"
"net/url"
"strconv"
"strings"
)
func getLabel(labels map[string]string, key, def string) string {
if v, ok := labels[key]; ok {
return v
}
return def
}
func getRegionAZ(node *v1.Node) (string, string) {
region, exists := node.Labels[LabelNodeRegion]
if !exists {
return "", ""
}
zone, exists := node.Labels[LabelNodeAZ]
if !exists {
return region, ""
}
return region, zone
}
func getFullName(namespace, name string) string {
if len(namespace) != 0 {
return namespace + "/" + name
}
return name
}
func getProtocol(port v1.EndpointPort) (string, bool) {
switch port.Protocol {
case SchemaTCP:
switch strings.ToUpper(port.Name) {
case SchemaHTTPS:
return protocolRest, true
default:
return protocolRest, false
}
default:
return strings.ToLower(string(port.Protocol)), false
}
}
func generateEndpoint(ip string, port v1.EndpointPort) string {
protocol, secure := getProtocol(port)
u := url.URL{
Scheme: protocol,
Host: ip + ":" + strconv.FormatInt(int64(port.Port), 10),
}
if secure {
u.RawQuery = "sslEnabled=true"
}
return u.String()
}
func generateServiceKey(domainProject string, svc *v1.Service) *pb.MicroServiceKey {
return &pb.MicroServiceKey{
Tenant: domainProject,
Environment: getLabel(svc.Labels, LabelEnvironment, ""),
AppId: getLabel(svc.Labels, LabelApp, pb.APP_ID),
ServiceName: svc.Name,
Version: getLabel(svc.Labels, LabelVersion, pb.VERSION),
}
}
func FromK8sService(domainProject string, svc *v1.Service) (ms *pb.MicroService) {
ms = &pb.MicroService{
ServiceId: generateServiceID(domainProject, svc),
Environment: getLabel(svc.Labels, LabelEnvironment, ""),
AppId: getLabel(svc.Labels, LabelApp, pb.APP_ID),
ServiceName: svc.Name,
Version: getLabel(svc.Labels, LabelVersion, pb.VERSION),
Level: "BACK",
Status: pb.MS_UP,
Framework: &pb.FrameWorkProperty{
Name: Name,
},
RegisterBy: pb.REGISTERBY_PLATFORM,
Properties: map[string]string{
PropNamespace: svc.Namespace,
PropServiceType: string(svc.Spec.Type),
PropExternalName: svc.Spec.ExternalName,
},
}
ms.Timestamp = strconv.FormatInt(svc.CreationTimestamp.Unix(), 10)
ms.ModTimestamp = ms.Timestamp
return
}
func AsKeyValue(key string, v interface{}, resourceVersion string) *discovery.KeyValue {
rev, _ := strconv.ParseInt(resourceVersion, 10, 64)
kv := discovery.NewKeyValue()
kv.Key = util.StringToBytesWithNoCopy(key)
kv.Value = v
kv.ModRevision = rev
return kv
}