devfile 0.0.4.pre.alpha1-arm64-darwin → 0.0.11.pre.alpha1-arm64-darwin
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/devfile +0 -0
- data/ext/devfile.go +41 -19
- data/ext/main.go +59 -58
- data/lib/devfile.rb +12 -6
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 022c2013340f8ac58d39c78763e2820e5ecdbde4b4bfad366756a4c018ad610c
|
4
|
+
data.tar.gz: f3f50f92496f1361859f2140f264fc17817aa4f2d80c7608f12270a84a869c40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78758a78eb281a2ed9e65230425a33fb43b1b0da61419351e73efe154a47aee552dee439d9b0ad45f6fb307bdb5f35dbf435925c3ac6add0f35534b25ba1c1a9
|
7
|
+
data.tar.gz: 06e0da12b3a91d20e53cfcc1d500cdc03c73e8121047b35af1ce5ca3d7e8ca62b72785c5f37ead01eadd181ad8d7078297744525c77b0dafae2abfea654884f3
|
data/bin/devfile
CHANGED
Binary file
|
data/ext/devfile.go
CHANGED
@@ -3,10 +3,14 @@ package main
|
|
3
3
|
import "C"
|
4
4
|
import (
|
5
5
|
"bytes"
|
6
|
-
"
|
6
|
+
"strconv"
|
7
|
+
"text/template"
|
8
|
+
|
7
9
|
"github.com/devfile/library/v2/pkg/devfile/generator"
|
8
10
|
"github.com/devfile/library/v2/pkg/devfile/parser"
|
9
11
|
"github.com/devfile/library/v2/pkg/devfile/parser/data/v2/common"
|
12
|
+
appsv1 "k8s.io/api/apps/v1"
|
13
|
+
corev1 "k8s.io/api/core/v1"
|
10
14
|
networkingv1 "k8s.io/api/networking/v1"
|
11
15
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
12
16
|
"k8s.io/apimachinery/pkg/runtime"
|
@@ -18,7 +22,7 @@ type Devfile struct {
|
|
18
22
|
devfileObj parser.DevfileObj
|
19
23
|
}
|
20
24
|
|
21
|
-
func (d Devfile) getDeployment(name, namespace string, labels, annotations map[string]string, replicas int) (
|
25
|
+
func (d Devfile) getDeployment(name, namespace string, labels, annotations map[string]string, replicas int) (*appsv1.Deployment, error) {
|
22
26
|
containers, err := generator.GetContainers(d.devfileObj, common.DevfileOptions{})
|
23
27
|
if err != nil {
|
24
28
|
return nil, err
|
@@ -50,7 +54,7 @@ func (d Devfile) getDeployment(name, namespace string, labels, annotations map[s
|
|
50
54
|
return deployment, err
|
51
55
|
}
|
52
56
|
|
53
|
-
func (d Devfile) getService(name, namespace string, labels, annotations map[string]string) (
|
57
|
+
func (d Devfile) getService(name, namespace string, labels, annotations map[string]string) (*corev1.Service, error) {
|
54
58
|
service, err := generator.GetService(d.devfileObj, generator.ServiceParams{
|
55
59
|
TypeMeta: generator.GetTypeMeta("Service", "v1"),
|
56
60
|
ObjectMeta: generator.GetObjectMeta(name, namespace, labels, annotations),
|
@@ -63,7 +67,12 @@ func (d Devfile) getService(name, namespace string, labels, annotations map[stri
|
|
63
67
|
return service, err
|
64
68
|
}
|
65
69
|
|
66
|
-
func (d Devfile) getIngress(name, namespace string, labels, annotations map[string]string,
|
70
|
+
func (d Devfile) getIngress(name, namespace string, labels, annotations map[string]string, domainTemplate, ingressClass string) (*networkingv1.Ingress, error) {
|
71
|
+
|
72
|
+
if ingressClass == "none" {
|
73
|
+
return nil, nil
|
74
|
+
}
|
75
|
+
|
67
76
|
components, err := d.devfileObj.Data.GetDevfileContainerComponents(common.DevfileOptions{})
|
68
77
|
if err != nil {
|
69
78
|
return nil, err
|
@@ -72,12 +81,22 @@ func (d Devfile) getIngress(name, namespace string, labels, annotations map[stri
|
|
72
81
|
var hosts []string
|
73
82
|
var rules []networkingv1.IngressRule
|
74
83
|
|
84
|
+
// Create a new template and parse the letter into it.
|
85
|
+
t, err := template.New("domainTemplate").Parse(domainTemplate)
|
86
|
+
if err != nil {
|
87
|
+
return nil, err
|
88
|
+
}
|
89
|
+
|
75
90
|
for _, component := range components {
|
76
91
|
for _, endpoint := range component.Container.Endpoints {
|
77
|
-
domain
|
78
|
-
|
92
|
+
var domain bytes.Buffer
|
93
|
+
err := t.Execute(&domain, map[string]string{"port": strconv.Itoa(endpoint.TargetPort)})
|
94
|
+
if err != nil {
|
95
|
+
return nil, err
|
96
|
+
}
|
97
|
+
hosts = append(hosts, domain.String())
|
79
98
|
rules = append(rules, networkingv1.IngressRule{
|
80
|
-
Host: domain,
|
99
|
+
Host: domain.String(),
|
81
100
|
IngressRuleValue: networkingv1.IngressRuleValue{
|
82
101
|
HTTP: &networkingv1.HTTPIngressRuleValue{
|
83
102
|
Paths: []networkingv1.HTTPIngressPath{
|
@@ -104,23 +123,16 @@ func (d Devfile) getIngress(name, namespace string, labels, annotations map[stri
|
|
104
123
|
return nil, nil
|
105
124
|
}
|
106
125
|
|
107
|
-
// since annotations is a map, it is passed by reference in go
|
108
|
-
// hence to modify it, create a new copy
|
109
|
-
ingressAnnotations := map[string]string{
|
110
|
-
"kubernetes.io/ingress.class": ingressClass,
|
111
|
-
}
|
112
|
-
for k, v := range annotations {
|
113
|
-
ingressAnnotations[k] = v
|
114
|
-
}
|
115
126
|
ingress := &networkingv1.Ingress{
|
116
127
|
TypeMeta: generator.GetTypeMeta("Ingress", "networking.k8s.io/v1"),
|
117
128
|
ObjectMeta: metav1.ObjectMeta{
|
118
129
|
Name: name,
|
119
130
|
Namespace: namespace,
|
120
131
|
Labels: labels,
|
121
|
-
Annotations:
|
132
|
+
Annotations: annotations,
|
122
133
|
},
|
123
134
|
Spec: networkingv1.IngressSpec{
|
135
|
+
IngressClassName: &ingressClass,
|
124
136
|
//TLS: []networkingv1.IngressTLS{
|
125
137
|
// {
|
126
138
|
// Hosts: hosts,
|
@@ -134,21 +146,31 @@ func (d Devfile) getIngress(name, namespace string, labels, annotations map[stri
|
|
134
146
|
return ingress, nil
|
135
147
|
}
|
136
148
|
|
137
|
-
func (d Devfile) getAll(name, namespace string, labels, annotations map[string]string, replicas int,
|
149
|
+
func (d Devfile) getAll(name, namespace string, labels, annotations map[string]string, replicas int, domainTemplate, ingressClass string) ([]runtime.Object, error) {
|
150
|
+
|
151
|
+
var result []runtime.Object
|
152
|
+
|
138
153
|
deployment, err := d.getDeployment(name, namespace, labels, annotations, replicas)
|
139
154
|
if err != nil {
|
140
155
|
return nil, err
|
141
156
|
}
|
157
|
+
result = append(result, deployment)
|
158
|
+
|
142
159
|
service, err := d.getService(name, namespace, labels, annotations)
|
143
160
|
if err != nil {
|
144
161
|
return nil, err
|
145
162
|
}
|
146
|
-
|
163
|
+
result = append(result, service)
|
164
|
+
|
165
|
+
ingress, err := d.getIngress(name, namespace, labels, annotations, domainTemplate, ingressClass)
|
147
166
|
if err != nil {
|
148
167
|
return nil, err
|
149
168
|
}
|
169
|
+
if ingress != nil {
|
170
|
+
result = append(result, ingress)
|
171
|
+
}
|
150
172
|
|
151
|
-
return
|
173
|
+
return result, nil
|
152
174
|
}
|
153
175
|
|
154
176
|
func (d Devfile) hasContainerComponents() (bool, error) {
|
data/ext/main.go
CHANGED
@@ -9,11 +9,6 @@ import (
|
|
9
9
|
"k8s.io/apimachinery/pkg/runtime"
|
10
10
|
)
|
11
11
|
|
12
|
-
type Result struct {
|
13
|
-
content string
|
14
|
-
err error
|
15
|
-
}
|
16
|
-
|
17
12
|
func main() {
|
18
13
|
args := os.Args
|
19
14
|
|
@@ -25,27 +20,28 @@ func main() {
|
|
25
20
|
fnName := os.Args[1]
|
26
21
|
devfile := os.Args[2]
|
27
22
|
|
28
|
-
var
|
23
|
+
var content string
|
24
|
+
var err error
|
29
25
|
|
30
26
|
switch fnName {
|
31
27
|
case "deployment":
|
32
|
-
|
28
|
+
content, err = getDeployment(devfile, args[3], args[4], args[5], args[6], args[7])
|
33
29
|
case "service":
|
34
|
-
|
30
|
+
content, err = getService(devfile, args[3], args[4], args[5], args[6])
|
35
31
|
case "ingress":
|
36
|
-
|
32
|
+
content, err = getIngress(devfile, args[3], args[4], args[5], args[6], args[7], args[8])
|
37
33
|
case "all":
|
38
|
-
|
34
|
+
content, err = getAll(devfile, args[3], args[4], args[5], args[6], args[7], args[8], args[9])
|
39
35
|
case "flatten":
|
40
|
-
|
36
|
+
content, err = flatten(devfile)
|
41
37
|
}
|
42
38
|
|
43
|
-
if
|
44
|
-
fmt.Fprint(os.Stderr,
|
39
|
+
if err != nil {
|
40
|
+
fmt.Fprint(os.Stderr, err)
|
45
41
|
os.Exit(1)
|
46
42
|
}
|
47
43
|
|
48
|
-
fmt.Print(
|
44
|
+
fmt.Print(content)
|
49
45
|
}
|
50
46
|
|
51
47
|
func unmarshalKeyValuePair(data string) (map[string]string, error) {
|
@@ -57,147 +53,152 @@ func unmarshalKeyValuePair(data string) (map[string]string, error) {
|
|
57
53
|
return values, err
|
58
54
|
}
|
59
55
|
|
60
|
-
func getDeployment(devfile, name, namespace, labelsStr, annotationsStr, replicas string)
|
56
|
+
func getDeployment(devfile, name, namespace, labelsStr, annotationsStr, replicas string) (string, error) {
|
61
57
|
d, err := parseDevfile(devfile)
|
62
58
|
if err != nil {
|
63
|
-
return
|
59
|
+
return "", err
|
64
60
|
}
|
65
61
|
exists, err := d.hasContainerComponents()
|
66
62
|
if err != nil {
|
67
|
-
return
|
63
|
+
return "", err
|
68
64
|
}
|
69
65
|
if exists == false {
|
70
|
-
return
|
66
|
+
return "", err
|
71
67
|
}
|
72
68
|
labels, err := unmarshalKeyValuePair(labelsStr)
|
73
69
|
if err != nil {
|
74
|
-
return
|
70
|
+
return "", err
|
75
71
|
}
|
76
72
|
annotations, err := unmarshalKeyValuePair(annotationsStr)
|
77
73
|
if err != nil {
|
78
|
-
return
|
74
|
+
return "", err
|
79
75
|
}
|
80
76
|
replicasInt, err := strconv.Atoi(replicas)
|
81
77
|
if err != nil {
|
82
|
-
return
|
78
|
+
return "", err
|
83
79
|
}
|
84
80
|
deployment, err := d.getDeployment(name, namespace, labels, annotations, replicasInt)
|
85
81
|
if err != nil {
|
86
|
-
return
|
82
|
+
return "", err
|
87
83
|
}
|
88
84
|
content, err := marshalResources([]runtime.Object{deployment})
|
89
85
|
if err != nil {
|
90
|
-
return
|
86
|
+
return "", err
|
91
87
|
}
|
92
|
-
return
|
88
|
+
return content, nil
|
93
89
|
}
|
94
90
|
|
95
|
-
func getService(devfile, name, namespace, labelsStr, annotationsStr string)
|
91
|
+
func getService(devfile, name, namespace, labelsStr, annotationsStr string) (string, error) {
|
96
92
|
d, err := parseDevfile(devfile)
|
97
93
|
if err != nil {
|
98
|
-
return
|
94
|
+
return "", err
|
99
95
|
}
|
100
96
|
exists, err := d.hasContainerComponents()
|
101
97
|
if err != nil {
|
102
|
-
return
|
98
|
+
return "", err
|
103
99
|
}
|
104
100
|
if exists == false {
|
105
|
-
return
|
101
|
+
return "", err
|
106
102
|
}
|
107
103
|
labels, err := unmarshalKeyValuePair(labelsStr)
|
108
104
|
if err != nil {
|
109
|
-
return
|
105
|
+
return "", err
|
110
106
|
}
|
111
107
|
annotations, err := unmarshalKeyValuePair(annotationsStr)
|
112
108
|
if err != nil {
|
113
|
-
return
|
109
|
+
return "", err
|
114
110
|
}
|
115
111
|
service, err := d.getService(name, namespace, labels, annotations)
|
116
112
|
if err != nil {
|
117
|
-
return
|
113
|
+
return "", err
|
118
114
|
}
|
119
115
|
content, err := marshalResources([]runtime.Object{service})
|
120
116
|
if err != nil {
|
121
|
-
return
|
117
|
+
return "", err
|
122
118
|
}
|
123
|
-
return
|
119
|
+
return content, nil
|
124
120
|
}
|
125
121
|
|
126
|
-
func getIngress(devfile, name, namespace, labelsStr, annotationsStr,
|
122
|
+
func getIngress(devfile, name, namespace, labelsStr, annotationsStr, domainTemplate, ingressClass string) (string, error) {
|
127
123
|
d, err := parseDevfile(devfile)
|
128
124
|
if err != nil {
|
129
|
-
return
|
125
|
+
return "", err
|
130
126
|
}
|
131
127
|
exists, err := d.hasContainerComponents()
|
132
128
|
if err != nil {
|
133
|
-
return
|
129
|
+
return "", err
|
134
130
|
}
|
135
131
|
if exists == false {
|
136
|
-
return
|
132
|
+
return "", err
|
137
133
|
}
|
138
134
|
labels, err := unmarshalKeyValuePair(labelsStr)
|
139
135
|
if err != nil {
|
140
|
-
return
|
136
|
+
return "", err
|
141
137
|
}
|
142
138
|
annotations, err := unmarshalKeyValuePair(annotationsStr)
|
143
139
|
if err != nil {
|
144
|
-
return
|
140
|
+
return "", err
|
145
141
|
}
|
146
|
-
ingress, err := d.getIngress(name, namespace, labels, annotations,
|
142
|
+
ingress, err := d.getIngress(name, namespace, labels, annotations, domainTemplate, ingressClass)
|
147
143
|
if err != nil {
|
148
|
-
return
|
144
|
+
return "", err
|
149
145
|
}
|
146
|
+
|
147
|
+
if ingress == nil {
|
148
|
+
return "", nil
|
149
|
+
}
|
150
|
+
|
150
151
|
content, err := marshalResources([]runtime.Object{ingress})
|
151
152
|
if err != nil {
|
152
|
-
return
|
153
|
+
return "", err
|
153
154
|
}
|
154
|
-
return
|
155
|
+
return content, nil
|
155
156
|
}
|
156
157
|
|
157
|
-
func getAll(devfile string, name, namespace, labelsStr, annotationsStr, replicas,
|
158
|
+
func getAll(devfile string, name, namespace, labelsStr, annotationsStr, replicas, domainTemplate, ingressClass string) (string, error) {
|
158
159
|
d, err := parseDevfile(devfile)
|
159
160
|
if err != nil {
|
160
|
-
return
|
161
|
+
return "", err
|
161
162
|
}
|
162
163
|
exists, err := d.hasContainerComponents()
|
163
164
|
if err != nil {
|
164
|
-
return
|
165
|
+
return "", err
|
165
166
|
}
|
166
167
|
if exists == false {
|
167
|
-
return
|
168
|
+
return "", err
|
168
169
|
}
|
169
170
|
labels, err := unmarshalKeyValuePair(labelsStr)
|
170
171
|
if err != nil {
|
171
|
-
return
|
172
|
+
return "", err
|
172
173
|
}
|
173
174
|
annotations, err := unmarshalKeyValuePair(annotationsStr)
|
174
175
|
if err != nil {
|
175
|
-
return
|
176
|
+
return "", err
|
176
177
|
}
|
177
178
|
replicasInt, err := strconv.Atoi(replicas)
|
178
179
|
if err != nil {
|
179
|
-
return
|
180
|
+
return "", err
|
180
181
|
}
|
181
|
-
resources, err := d.getAll(name, namespace, labels, annotations, replicasInt,
|
182
|
+
resources, err := d.getAll(name, namespace, labels, annotations, replicasInt, domainTemplate, ingressClass)
|
182
183
|
if err != nil {
|
183
|
-
return
|
184
|
+
return "", err
|
184
185
|
}
|
185
186
|
content, err := marshalResources(resources)
|
186
187
|
if err != nil {
|
187
|
-
return
|
188
|
+
return "", err
|
188
189
|
}
|
189
|
-
return
|
190
|
+
return content, nil
|
190
191
|
}
|
191
192
|
|
192
|
-
func flatten(devfile string)
|
193
|
+
func flatten(devfile string) (string, error) {
|
193
194
|
d, err := parseDevfile(devfile)
|
194
195
|
if err != nil {
|
195
|
-
return
|
196
|
+
return "", err
|
196
197
|
}
|
197
198
|
flattenedDevfile := d.getFlattenedDevfileContent()
|
198
199
|
content, err := marshalDevfile(flattenedDevfile)
|
199
200
|
if err != nil {
|
200
|
-
return
|
201
|
+
return "", err
|
201
202
|
}
|
202
|
-
return
|
203
|
+
return content, err
|
203
204
|
}
|
data/lib/devfile.rb
CHANGED
@@ -10,7 +10,9 @@ module Devfile
|
|
10
10
|
|
11
11
|
class << self
|
12
12
|
def get_deployment(devfile, name, namespace, labels, annotations, replicas)
|
13
|
-
stdout, stderr, status = Open3.capture3(
|
13
|
+
stdout, stderr, status = Open3.capture3(
|
14
|
+
"#{FILE_PATH} deployment '#{devfile}' #{name} #{namespace} '#{labels}' '#{annotations}' #{replicas}"
|
15
|
+
)
|
14
16
|
|
15
17
|
raise stderr unless status.success?
|
16
18
|
|
@@ -18,24 +20,28 @@ module Devfile
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def get_service(devfile, name, namespace, labels, annotations)
|
21
|
-
stdout, stderr, status = Open3.capture3(
|
23
|
+
stdout, stderr, status = Open3.capture3(
|
24
|
+
"#{FILE_PATH} service '#{devfile}' #{name} #{namespace} '#{labels}' '#{annotations}'"
|
25
|
+
)
|
22
26
|
|
23
27
|
raise stderr unless status.success?
|
24
28
|
|
25
29
|
stdout
|
26
30
|
end
|
27
31
|
|
28
|
-
def get_ingress(devfile, name, namespace, labels, annotations,
|
29
|
-
stdout, stderr, status = Open3.capture3(
|
32
|
+
def get_ingress(devfile, name, namespace, labels, annotations, domain_template, ingress_class)
|
33
|
+
stdout, stderr, status = Open3.capture3(
|
34
|
+
"#{FILE_PATH} ingress '#{devfile}' #{name} #{namespace} '#{labels}' '#{annotations}' #{domain_template} #{ingress_class}"
|
35
|
+
)
|
30
36
|
|
31
37
|
raise stderr unless status.success?
|
32
38
|
|
33
39
|
stdout
|
34
40
|
end
|
35
41
|
|
36
|
-
def get_all(devfile, name, namespace, labels, annotations, replicas,
|
42
|
+
def get_all(devfile, name, namespace, labels, annotations, replicas, domain_template, ingress_class)
|
37
43
|
stdout, stderr, status = Open3.capture3(
|
38
|
-
"#{FILE_PATH} all '#{devfile}' #{name} #{namespace} '#{labels}' '#{annotations}' #{replicas} #{
|
44
|
+
"#{FILE_PATH} all '#{devfile}' #{name} #{namespace} '#{labels}' '#{annotations}' #{replicas} #{domain_template} #{ingress_class}"
|
39
45
|
)
|
40
46
|
|
41
47
|
raise stderr unless status.success?
|
metadata
CHANGED
@@ -1,17 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devfile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11.pre.alpha1
|
5
5
|
platform: arm64-darwin
|
6
6
|
authors:
|
7
7
|
- GitLab
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Library used to generate kubernetes manifests from a Devfile.
|
14
|
-
email:
|
14
|
+
email:
|
15
|
+
- cwoolley@gitlab.com
|
16
|
+
- vtak@gitlab.com
|
17
|
+
- spatnaik@gitlab.com
|
15
18
|
executables: []
|
16
19
|
extensions: []
|
17
20
|
extra_rdoc_files: []
|
@@ -43,7 +46,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
43
46
|
- !ruby/object:Gem::Version
|
44
47
|
version: 1.3.1
|
45
48
|
requirements: []
|
46
|
-
rubygems_version: 3.4.
|
49
|
+
rubygems_version: 3.4.10
|
47
50
|
signing_key:
|
48
51
|
specification_version: 4
|
49
52
|
summary: Parse and generate kubernetes manifests from a Devfile
|