generated from LinuxSuRen/.github
-
Notifications
You must be signed in to change notification settings - Fork 16
/
root.go
100 lines (93 loc) · 2.51 KB
/
root.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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package registry
import (
"context"
"fmt"
"github.com/kubesphere-sigs/ks/kubectl-plugin/types"
"github.com/spf13/cobra"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/client-go/dynamic"
"sigs.k8s.io/yaml"
)
// NewRegistryCmd returns a command of pipeline
func NewRegistryCmd(client dynamic.Interface) (cmd *cobra.Command) {
ctx := context.TODO()
cmd = &cobra.Command{
Use: "registry",
Aliases: []string{"reg"},
Short: "start a registry locally",
Example: `Before you get started, please sudo vim /etc/docker/daemon.json, then add the following config:
"insecure-registries": [
"139.198.3.176:32678"
],
After that, please restart docker daemon via: systemctl restart docker
`,
RunE: func(cmd *cobra.Command, args []string) (err error) {
_ = client.Resource(types.GetDeploySchema()).Namespace("default").Delete(ctx, "registry", metav1.DeleteOptions{})
_ = client.Resource(types.GetServiceSchema()).Namespace("default").Delete(ctx, "registry", metav1.DeleteOptions{})
obj := &unstructured.Unstructured{}
content := getRegistryDeploy()
if err = yaml.Unmarshal([]byte(content), obj); err == nil {
if _, err = client.Resource(types.GetDeploySchema()).Namespace("default").Create(ctx, obj, metav1.CreateOptions{}); err != nil {
err = fmt.Errorf("failed when create deploy, %#v", err)
return
}
cmd.Println("registry deploy installed")
}
obj = &unstructured.Unstructured{}
svcContent := getService()
if err = yaml.Unmarshal([]byte(svcContent), obj); err == nil {
if _, err = client.Resource(types.GetServiceSchema()).Namespace("default").Create(ctx, obj, metav1.CreateOptions{}); err != nil {
err = fmt.Errorf("failed when create service, %#v", err)
} else {
cmd.Println("registry service installed")
}
}
return
},
}
return
}
func getService() string {
return `
apiVersion: v1
kind: Service
metadata:
name: registry
spec:
ports:
- name: registry
nodePort: 32678
port: 5000
protocol: TCP
targetPort: 5000
selector:
app: registry
type: NodePort
`
}
func getRegistryDeploy() string {
return `
apiVersion: apps/v1
kind: Deployment
metadata:
name: registry
spec:
replicas: 1
selector:
matchLabels:
app: registry
template:
metadata:
labels:
app: registry
spec:
containers:
- image: registry:2
imagePullPolicy: IfNotPresent
name: registry
ports:
- containerPort: 5000
protocol: TCP
`
}