/
cluster_spec.go
57 lines (50 loc) · 1.68 KB
/
cluster_spec.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
* Copyright 2020 The FedLearner Authors. All Rights Reserved.
*
* Licensed 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 operator
import (
"encoding/json"
"fmt"
"strconv"
"strings"
"github.com/bytedance/fedlearner/deploy/kubernetes_operator/pkg/apis/fedlearner.k8s.io/v1alpha1"
)
const (
ServiceFormat = "%s.%s.svc"
)
type ClusterSpec struct {
Services map[v1alpha1.FLReplicaType][]string `json:"clusterSpec"`
}
func NewClusterSpec(namespace string, app *v1alpha1.FLApp) ClusterSpec {
clusterSpec := ClusterSpec{
Services: make(map[v1alpha1.FLReplicaType][]string),
}
for rtype := range app.Spec.FLReplicaSpecs {
rt := strings.ToLower(string(rtype))
replicas := getReplicas(app, rtype)
port, err := GetPortFromApp(app, rtype)
if err != nil {
port = v1alpha1.DefaultPort
}
for index := 0; index < replicas; index++ {
serviceName := fmt.Sprintf(ServiceFormat, GenIndexName(app.Name, strings.ToLower(app.Spec.Role), rt, strconv.Itoa(index)), namespace)
clusterSpec.Services[rtype] = append(clusterSpec.Services[rtype], fmt.Sprintf("%s:%d", serviceName, port))
}
}
return clusterSpec
}
func (cs ClusterSpec) Marshal() ([]byte, error) {
return json.Marshal(cs)
}