devfile 0.0.11.pre.alpha1-arm64-darwin → 0.0.13.pre.alpha1-arm64-darwin

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 022c2013340f8ac58d39c78763e2820e5ecdbde4b4bfad366756a4c018ad610c
4
- data.tar.gz: f3f50f92496f1361859f2140f264fc17817aa4f2d80c7608f12270a84a869c40
3
+ metadata.gz: 3e655c5b49b095dd4cb57fec39ee88b65de58373c5807cfd4c690412b3f0ae76
4
+ data.tar.gz: 86a3fd022d2a7457d7f7d90ab23683bf7135e7f7682b7a97119605b279bc04d8
5
5
  SHA512:
6
- metadata.gz: 78758a78eb281a2ed9e65230425a33fb43b1b0da61419351e73efe154a47aee552dee439d9b0ad45f6fb307bdb5f35dbf435925c3ac6add0f35534b25ba1c1a9
7
- data.tar.gz: 06e0da12b3a91d20e53cfcc1d500cdc03c73e8121047b35af1ce5ca3d7e8ca62b72785c5f37ead01eadd181ad8d7078297744525c77b0dafae2abfea654884f3
6
+ metadata.gz: 6eeb0faf58cb8adc029653c74e17257e15970fe7eb8e989341e91ba22335f80d182042443ec3add21e9712eccdbd1b45a235a507dc09cd3ff54be930ad625049
7
+ data.tar.gz: cc1628f1a5458f23b88c8786acb27dcdce42a1d18b3cf841b0aca6c8d9cebe3ae64648ebac9372f345cc8fc52bc913746180195f8fdb5299aefa2f3599ddc291
data/bin/devfile CHANGED
Binary file
data/ext/devfile.go CHANGED
@@ -1,6 +1,5 @@
1
1
  package main
2
2
 
3
- import "C"
4
3
  import (
5
4
  "bytes"
6
5
  "strconv"
@@ -12,6 +11,7 @@ import (
12
11
  appsv1 "k8s.io/api/apps/v1"
13
12
  corev1 "k8s.io/api/core/v1"
14
13
  networkingv1 "k8s.io/api/networking/v1"
14
+ "k8s.io/apimachinery/pkg/api/resource"
15
15
  metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
16
16
  "k8s.io/apimachinery/pkg/runtime"
17
17
  "k8s.io/cli-runtime/pkg/printers"
@@ -22,6 +22,11 @@ type Devfile struct {
22
22
  devfileObj parser.DevfileObj
23
23
  }
24
24
 
25
+ type pvcOptions struct {
26
+ Name string
27
+ Size string
28
+ }
29
+
25
30
  func (d Devfile) getDeployment(name, namespace string, labels, annotations map[string]string, replicas int) (*appsv1.Deployment, error) {
26
31
  containers, err := generator.GetContainers(d.devfileObj, common.DevfileOptions{})
27
32
  if err != nil {
@@ -31,7 +36,7 @@ func (d Devfile) getDeployment(name, namespace string, labels, annotations map[s
31
36
  if err != nil {
32
37
  return nil, err
33
38
  }
34
- volumes, err := d.getVolumesAndVolumeMounts(containers, initContainers, name)
39
+ volumes, _, err := d.getVolumesAndVolumeMounts(containers, initContainers, name)
35
40
  if err != nil {
36
41
  return nil, err
37
42
  }
@@ -146,6 +151,42 @@ func (d Devfile) getIngress(name, namespace string, labels, annotations map[stri
146
151
  return ingress, nil
147
152
  }
148
153
 
154
+ func (d Devfile) getPVC(name, namespace string, labels, annotations map[string]string) ([]*corev1.PersistentVolumeClaim, error) {
155
+ containers, err := generator.GetContainers(d.devfileObj, common.DevfileOptions{})
156
+ if err != nil {
157
+ return nil, err
158
+ }
159
+ initContainers, err := generator.GetInitContainers(d.devfileObj)
160
+ if err != nil {
161
+ return nil, err
162
+ }
163
+ _, pvcNameToPvcOptions, err := d.getVolumesAndVolumeMounts(containers, initContainers, name)
164
+ if err != nil {
165
+ return nil, err
166
+ }
167
+
168
+ pvcs := make([]*corev1.PersistentVolumeClaim, 0)
169
+ for _, options := range pvcNameToPvcOptions {
170
+ quantity, err := resource.ParseQuantity(options.Size)
171
+ if err != nil {
172
+ return nil, err
173
+ }
174
+ pvcParams := generator.PVCParams{
175
+ TypeMeta: generator.GetTypeMeta("PersistentVolumeClaim", "v1"),
176
+ ObjectMeta: metav1.ObjectMeta{
177
+ Name: options.Name,
178
+ Namespace: namespace,
179
+ Labels: labels,
180
+ Annotations: annotations,
181
+ },
182
+ Quantity: quantity,
183
+ }
184
+ pvc := generator.GetPVC(pvcParams)
185
+ pvcs = append(pvcs, pvc)
186
+ }
187
+ return pvcs, nil
188
+ }
189
+
149
190
  func (d Devfile) getAll(name, namespace string, labels, annotations map[string]string, replicas int, domainTemplate, ingressClass string) ([]runtime.Object, error) {
150
191
 
151
192
  var result []runtime.Object
@@ -170,6 +211,14 @@ func (d Devfile) getAll(name, namespace string, labels, annotations map[string]s
170
211
  result = append(result, ingress)
171
212
  }
172
213
 
214
+ pvcs, err := d.getPVC(name, namespace, labels, annotations)
215
+ if err != nil {
216
+ return nil, err
217
+ }
218
+ for _, pvc := range pvcs {
219
+ result = append(result, pvc)
220
+ }
221
+
173
222
  return result, nil
174
223
  }
175
224
 
data/ext/go.mod CHANGED
@@ -1,4 +1,4 @@
1
- module gitlab.com/gitlab-org/incubation-engineering/server-runtime/devfilerubyffi
1
+ module gitlab-org/remote-development/devfile-gem
2
2
 
3
3
  go 1.18
4
4
 
@@ -7,6 +7,7 @@ require (
7
7
  k8s.io/api v0.26.1
8
8
  k8s.io/apimachinery v0.26.1
9
9
  k8s.io/cli-runtime v0.26.1
10
+ sigs.k8s.io/yaml v1.3.0
10
11
  )
11
12
 
12
13
  require (
@@ -115,5 +116,4 @@ require (
115
116
  sigs.k8s.io/controller-runtime v0.13.1 // indirect
116
117
  sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
117
118
  sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
118
- sigs.k8s.io/yaml v1.3.0 // indirect
119
119
  )
data/ext/main.go CHANGED
@@ -30,6 +30,8 @@ func main() {
30
30
  content, err = getService(devfile, args[3], args[4], args[5], args[6])
31
31
  case "ingress":
32
32
  content, err = getIngress(devfile, args[3], args[4], args[5], args[6], args[7], args[8])
33
+ case "pvc":
34
+ content, err = getPVC(devfile, args[3], args[4], args[5], args[6])
33
35
  case "all":
34
36
  content, err = getAll(devfile, args[3], args[4], args[5], args[6], args[7], args[8], args[9])
35
37
  case "flatten":
@@ -62,8 +64,8 @@ func getDeployment(devfile, name, namespace, labelsStr, annotationsStr, replicas
62
64
  if err != nil {
63
65
  return "", err
64
66
  }
65
- if exists == false {
66
- return "", err
67
+ if !exists {
68
+ return "", nil
67
69
  }
68
70
  labels, err := unmarshalKeyValuePair(labelsStr)
69
71
  if err != nil {
@@ -97,8 +99,8 @@ func getService(devfile, name, namespace, labelsStr, annotationsStr string) (str
97
99
  if err != nil {
98
100
  return "", err
99
101
  }
100
- if exists == false {
101
- return "", err
102
+ if !exists {
103
+ return "", nil
102
104
  }
103
105
  labels, err := unmarshalKeyValuePair(labelsStr)
104
106
  if err != nil {
@@ -128,8 +130,8 @@ func getIngress(devfile, name, namespace, labelsStr, annotationsStr, domainTempl
128
130
  if err != nil {
129
131
  return "", err
130
132
  }
131
- if exists == false {
132
- return "", err
133
+ if !exists {
134
+ return "", nil
133
135
  }
134
136
  labels, err := unmarshalKeyValuePair(labelsStr)
135
137
  if err != nil {
@@ -155,7 +157,7 @@ func getIngress(devfile, name, namespace, labelsStr, annotationsStr, domainTempl
155
157
  return content, nil
156
158
  }
157
159
 
158
- func getAll(devfile string, name, namespace, labelsStr, annotationsStr, replicas, domainTemplate, ingressClass string) (string, error) {
160
+ func getPVC(devfile, name, namespace, labelsStr, annotationsStr string) (string, error) {
159
161
  d, err := parseDevfile(devfile)
160
162
  if err != nil {
161
163
  return "", err
@@ -164,9 +166,44 @@ func getAll(devfile string, name, namespace, labelsStr, annotationsStr, replicas
164
166
  if err != nil {
165
167
  return "", err
166
168
  }
167
- if exists == false {
169
+ if !exists {
170
+ return "", nil
171
+ }
172
+ labels, err := unmarshalKeyValuePair(labelsStr)
173
+ if err != nil {
174
+ return "", err
175
+ }
176
+ annotations, err := unmarshalKeyValuePair(annotationsStr)
177
+ if err != nil {
178
+ return "", err
179
+ }
180
+ pvcs, err := d.getPVC(name, namespace, labels, annotations)
181
+ if err != nil {
182
+ return "", err
183
+ }
184
+ var result []runtime.Object
185
+ for _, pvc := range pvcs {
186
+ result = append(result, pvc)
187
+ }
188
+ content, err := marshalResources(result)
189
+ if err != nil {
190
+ return "", err
191
+ }
192
+ return content, nil
193
+ }
194
+
195
+ func getAll(devfile string, name, namespace, labelsStr, annotationsStr, replicas, domainTemplate, ingressClass string) (string, error) {
196
+ d, err := parseDevfile(devfile)
197
+ if err != nil {
198
+ return "", err
199
+ }
200
+ exists, err := d.hasContainerComponents()
201
+ if err != nil {
168
202
  return "", err
169
203
  }
204
+ if !exists {
205
+ return "", nil
206
+ }
170
207
  labels, err := unmarshalKeyValuePair(labelsStr)
171
208
  if err != nil {
172
209
  return "", err
data/ext/volume.go CHANGED
@@ -9,44 +9,47 @@ import (
9
9
  "strings"
10
10
  )
11
11
 
12
- func (d Devfile) getVolumesAndVolumeMounts(containers []corev1.Container, initContainers []corev1.Container, pvcNamePrefix string) ([]corev1.Volume, error) {
12
+ func (d Devfile) getVolumesAndVolumeMounts(containers []corev1.Container, initContainers []corev1.Container, volumeNamePrefix string) ([]corev1.Volume, map[string]pvcOptions, error) {
13
13
  containerComponents, err := d.devfileObj.Data.GetDevfileContainerComponents(common.DevfileOptions{})
14
14
  if err != nil {
15
- return nil, err
15
+ return nil, nil, err
16
16
  }
17
17
  volumeComponents, err := d.devfileObj.Data.GetDevfileVolumeComponents(common.DevfileOptions{})
18
18
  if err != nil {
19
- return nil, err
19
+ return nil, nil, err
20
20
  }
21
21
 
22
22
  var volumes []corev1.Volume
23
+ pvcNameToPvcOptions := map[string]pvcOptions{}
23
24
  for _, volumeComponent := range volumeComponents {
24
- volName := volumeComponent.Name
25
+ volumeName := fmt.Sprintf("%s-%s", volumeNamePrefix, volumeComponent.Name)
25
26
  if bool(*volumeComponent.Volume.Ephemeral) == true {
26
- emptyDir, err := getEmptyDir(volName, volumeComponent.Volume.Size)
27
+ emptyDir, err := getEmptyDir(volumeName, volumeComponent.Volume.Size)
27
28
  if err != nil {
28
- return nil, err
29
+ return nil, nil, err
29
30
  }
30
31
  volumes = append(volumes, emptyDir)
31
32
  } else {
32
- // TODO: figure this out; how should we pass PVC name? should the object be generated here?
33
- pvcName := fmt.Sprintf("%s-%s", pvcNamePrefix, volName)
34
- volumes = append(volumes, getPVC(volName, pvcName))
33
+ volumes = append(volumes, getPersistentVolumeClaim(volumeName, volumeName))
34
+ pvcNameToPvcOptions[volumeComponent.Name] = pvcOptions{
35
+ Name: volumeName,
36
+ Size: volumeComponent.Volume.Size,
37
+ }
35
38
  }
36
39
  // containerNameToMountPaths is a map of the Devfile container name to their Devfile Volume Mount Paths for a given Volume Name
37
40
  containerNameToMountPaths := make(map[string][]string)
38
41
  for _, containerComp := range containerComponents {
39
42
  for _, volumeMount := range containerComp.Container.VolumeMounts {
40
- if volName == volumeMount.Name {
43
+ if volumeComponent.Name == volumeMount.Name {
41
44
  containerNameToMountPaths[containerComp.Name] = append(containerNameToMountPaths[containerComp.Name], generator.GetVolumeMountPath(volumeMount))
42
45
  }
43
46
  }
44
47
  }
45
48
 
46
- addVolumeMountToContainers(containers, initContainers, volName, containerNameToMountPaths)
49
+ addVolumeMountToContainers(containers, initContainers, volumeName, containerNameToMountPaths)
47
50
  }
48
51
 
49
- return volumes, nil
52
+ return volumes, pvcNameToPvcOptions, nil
50
53
  }
51
54
 
52
55
  // addVolumeMountToContainers adds the Volume Mounts in containerNameToMountPaths to the containers for a given pvc and volumeName
@@ -82,8 +85,8 @@ func addVolumeMountToContainers(containers []corev1.Container, initContainers []
82
85
  }
83
86
  }
84
87
 
85
- // getPVC gets a pvc type volume with the given volume name and pvc name.
86
- func getPVC(volumeName, pvcName string) corev1.Volume {
88
+ // getPersistentVolumeClaim gets a pvc type volume with the given volume name and pvc name.
89
+ func getPersistentVolumeClaim(volumeName, pvcName string) corev1.Volume {
87
90
 
88
91
  return corev1.Volume{
89
92
  Name: volumeName,
data/lib/devfile.rb CHANGED
@@ -39,6 +39,16 @@ module Devfile
39
39
  stdout
40
40
  end
41
41
 
42
+ def get_pvc(devfile, name, namespace, labels, annotations)
43
+ stdout, stderr, status = Open3.capture3(
44
+ "#{FILE_PATH} deployment '#{devfile}' #{name} #{namespace} '#{labels}' '#{annotations}'"
45
+ )
46
+
47
+ raise stderr unless status.success?
48
+
49
+ stdout
50
+ end
51
+
42
52
  def get_all(devfile, name, namespace, labels, annotations, replicas, domain_template, ingress_class)
43
53
  stdout, stderr, status = Open3.capture3(
44
54
  "#{FILE_PATH} all '#{devfile}' #{name} #{namespace} '#{labels}' '#{annotations}' #{replicas} #{domain_template} #{ingress_class}"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devfile
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11.pre.alpha1
4
+ version: 0.0.13.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-04-09 00:00:00.000000000 Z
11
+ date: 2023-04-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Library used to generate kubernetes manifests from a Devfile.
14
14
  email:
@@ -46,7 +46,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.3.1
48
48
  requirements: []
49
- rubygems_version: 3.4.10
49
+ rubygems_version: 3.4.9
50
50
  signing_key:
51
51
  specification_version: 4
52
52
  summary: Parse and generate kubernetes manifests from a Devfile