Issue-ID: RIC-149
[it/test.git] / ric_robot_suite / helm / nanobot / templates / job-ric-robot-run.yaml
1 {{/*
2    Copyright (c) 2019 AT&T Intellectual Property.
3    Copyright (c) 2019 Nokia.
4    Copyright (c) 2020 HCL Technologies Limited.
5  
6    Licensed under the Apache License, Version 2.0 (the "License");
7    you may not use this file except in compliance with the License.
8    You may obtain a copy of the License at
9  
10        http://www.apache.org/licenses/LICENSE-2.0
11  
12    Unless required by applicable law or agreed to in writing, software
13    distributed under the License is distributed on an "AS IS" BASIS,
14    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15    See the License for the specific language governing permissions and
16    limitations under the License.
17 */}}
18 {{- $platformNamespace := include "common.namespace.platform" . }}
19 {{- $e2simNamespace := default "test"}}
20 {{- $xappNamespace := include "common.namespace.xapp" .  }}
21 {{- $releaseName := default "ric-full" .Values.ric.platform.releaseName }}
22 {{- $jobName :=  printf "%s-%s" .Release.Name $releaseName }}
23 {{- $acctName := randAlpha 6 | lower | printf "%s-%s" $jobName }}
24 {{- $serviceAccountName := default $acctName .Values.ric.robot.job.serviceAccount.name }}
25 {{- if .Values.ric.robot.job.serviceAccount.create }}
26 ---
27 apiVersion: v1
28 kind: ServiceAccount
29 metadata:
30   name: {{ $serviceAccountName }}
31   namespace: {{ .Release.Namespace }}
32 ---
33 apiVersion: rbac.authorization.k8s.io/v1beta1
34 kind: Role
35 metadata:
36   name: {{ $serviceAccountName }}-{{ $releaseName }}-ricplatform-access
37   namespace: {{ $platformNamespace }}
38 rules:
39 - apiGroups: [""]
40   resources: ["pods", "pods/log", "pods/exec", "services"]
41   verbs: ["get", "list"]
42 - apiGroups: ["apps"]
43   resources: ["daemonsets", "replicasets", "statefulsets"]
44   verbs: ["get", "list"]
45 - apiGroups: ["extensions"]
46   resources: ["daemonsets", "replicasets"]
47   verbs: ["get", "list"]
48 - apiGroups: ["apps"]
49   resources: ["deployments"]
50   verbs: ["get", "list", "patch"]
51 - apiGroups: ["extensions"]
52   resources: ["deployments"]
53   verbs: ["get", "list", "patch"]
54 ---
55 apiVersion: rbac.authorization.k8s.io/v1beta1
56 kind: RoleBinding
57 metadata:
58   name: {{ $serviceAccountName }}-{{ $releaseName }}-ricplatform-access
59   namespace: {{ $platformNamespace }}
60 roleRef:
61   apiGroup: rbac.authorization.k8s.io
62   kind: Role
63   name: {{ $serviceAccountName }}-{{ $releaseName }}-ricplatform-access
64 subjects:
65   - kind: ServiceAccount
66     name: {{ $serviceAccountName }}
67     namespace: {{ .Release.Namespace }}
68 {{- if ne $xappNamespace $platformNamespace }}
69 ---
70 apiVersion: rbac.authorization.k8s.io/v1beta1
71 kind: Role
72 metadata:
73   name: {{ $serviceAccountName }}-{{ $releaseName }}-xapp-access
74   namespace: {{ $xappNamespace }}
75 rules:
76 - apiGroups: [""]
77   resources: ["pods", "pods/log", "pods/exec", "services"]
78   verbs: ["get", "list"]
79 - apiGroups: ["apps"]
80   resources: ["deployments", "daemonsets", "replicasets", "statefulsets"]
81   verbs: ["get", "list"]
82 - apiGroups: ["extensions"]
83   resources: ["deployments", "daemonsets", "replicasets"]
84   verbs: ["get", "list"]
85 ---
86 apiVersion: rbac.authorization.k8s.io/v1beta1
87 kind: RoleBinding
88 metadata:
89   name: {{ $serviceAccountName }}-{{ $releaseName }}-xapp-access
90   namespace: {{ $xappNamespace }}
91 roleRef:
92   apiGroup: rbac.authorization.k8s.io
93   kind: Role
94   name: {{ $serviceAccountName }}-{{ $releaseName }}-xapp-access
95 subjects:
96   - kind: ServiceAccount
97     name: {{ $serviceAccountName }}
98     namespace: {{ .Release.Namespace }}
99  
100 {{- end }}
101 ---
102 apiVersion: rbac.authorization.k8s.io/v1beta1
103 kind: Role
104 metadata:
105   name: {{ $serviceAccountName }}-{{ $releaseName }}-e2sim-access
106   namespace: {{ $e2simNamespace }}
107 rules:
108 - apiGroups: [""]
109   resources: ["pods", "pods/log", "pods/exec", "services"]
110   verbs: ["get", "list"]
111 - apiGroups: ["apps"]
112   resources: ["daemonsets", "replicasets", "statefulsets"]
113   verbs: ["get", "list"]
114 - apiGroups: ["extensions"]
115   resources: ["daemonsets", "replicasets"]
116   verbs: ["get", "list"]
117 - apiGroups: ["apps"]
118   resources: ["deployments"]
119   verbs: ["get", "list", "patch"]
120 - apiGroups: ["extensions"]
121   resources: ["deployments"]
122   verbs: ["get", "list", "patch"]
123 ---
124 apiVersion: rbac.authorization.k8s.io/v1beta1
125 kind: RoleBinding
126 metadata:
127   name: {{ $serviceAccountName }}-{{ $releaseName }}-e2sim-access
128   namespace: {{ $e2simNamespace }}
129 roleRef:
130   apiGroup: rbac.authorization.k8s.io
131   kind: Role
132   name: {{ $serviceAccountName }}-{{ $releaseName }}-e2sim-access
133 subjects:
134   - kind: ServiceAccount
135     name: {{ $serviceAccountName }}
136     namespace: {{ .Release.Namespace }}
137 {{- end }}
138 ---
139 apiVersion: batch/v1
140 kind: Job
141 metadata:
142   name: {{ $jobName }}-ric-robot-run
143   namespace: {{ .Release.Namespace }}
144 spec:
145   backoffLimit:  {{ default 0 .Values.ric.robot.job.backoffLimit }}
146   template:
147     spec:
148       serviceAccountName: {{ $serviceAccountName }}
149       restartPolicy: {{ default "Never" .Values.ric.robot.job.restartPolicy }}
150       initContainers:
151         - name: {{ $jobName }}-generate-robot-kubeconfig
152           {{ with .Values.images.ric.robot.job.init }}
153           image: {{ if .repository }}{{- .repository -}} / {{- end -}}{{- .name -}}{{- if .tag -}} : {{- .tag -}} {{- end }}
154           imagePullPolicy: {{ default "IfNotPresent" .pullPolicy }}
155           {{- end }}
156           env:
157             - name: SVCACCT_NAME
158               value: {{ $serviceAccountName }}
159             - name: CLUSTER_NAME
160               value: {{ default "kubernetes" .Values.ric.cluster.name }}
161             - name: KUBECONFIG
162               value: /robot/etc/ric-robot-kubeconfig.conf
163             - name: K8S_API_HOST
164               value: "kubernetes.default.svc.{{ default "cluster.local" .Values.ric.cluster.domain }}"
165           command: ["/robot/bin/svcacct-to-kubeconfig.sh"]
166           volumeMounts:
167             - name: robot-etc
168               mountPath: /robot/etc
169               readOnly: false
170             {{- if .Values.ric.robot.log }}
171             - name: robot-log
172               mountPath: /robot/log
173               readOnly: false
174             {{- end }}
175             - name: robot-bin
176               mountPath: /robot/bin
177               readOnly: true
178       {{- $secrets := dict }}
179       {{- range $index, $container := .Values.images.ric.robot.job }}
180       {{- if index $container "repositoryCred" }}
181       {{- $_ := set $secrets $container.repositoryCred (dict "name" $container.repositoryCred) }}
182       {{- end }}
183       {{- end }}
184       {{- if keys $secrets }}
185       imagePullSecrets:
186       {{- values $secrets | toYaml |nindent 8 }}
187       {{- end }}
188       containers:
189         - name: {{ $jobName }}-ric-robot
190           {{ with .Values.images.ric.robot.job.run -}}
191           image: {{ if .repository }}{{- .repository -}} / {{- end -}}{{- .name -}}{{- if .tag -}} : {{- .tag -}} {{- end }}
192           imagePullPolicy: {{ default "IfNotPresent" .pullPolicy }}
193           {{- end }}
194           env:
195             - name: DBAAS_SERVICE_HOST
196               value: "service-ricplt-dbaas-tcp.ricplt.svc.cluster.local"
197             - name: DBAAS_SERVICE_PORT
198               value: "6379"
199             - name: RICPLT_NAMESPACE
200               value: {{ $platformNamespace }}
201             - name: RICPLT_RELEASE_NAME
202               value: {{ $releaseName }}
203             - name: RICPLT_COMPONENTS
204               value: {{ keys .Values.ric.platform.components | join " " }}
205             - name: RICXAPP_NAMESPACE
206               value: {{ $xappNamespace }}
207             - name: E2SIM_NAMESPACE
208               value: {{ $e2simNamespace }}
209             - name: KUBECONFIG
210               value: /robot/etc/ric-robot-kubeconfig.conf
211           command: ["robot"]
212           args:
213            - "-T"
214             {{- if not .Values.ric.robot.job.failOnTestFail }}
215             - "--NoStatusRC"
216             {{- end }}
217             {{- if .Values.ric.robot.log }}
218             - "-d"
219             - "/robot/log"
220             {{- else }}
221             - "-o"
222             - "NONE"
223             - "-l"
224             - "NONE"
225             - "-r"
226             - "NONE"
227             - "-L"
228             - "NONE"
229             {{- end }}
230             - "--console"
231             - "verbose"
232             - "-C"
233             - "off"
234             {{- if .Values.ric.robot.tags.enabled }}
235             {{- range .Values.ric.robot.tags.enabled }}
236             - "-i"
237             - "{{.}}"
238             {{- end }}
239             {{- end }}
240             {{- if .Values.ric.robot.tags.disabled }}
241             {{- range .Values.ric.robot.tags.disabled }}
242             - "-e"
243             - "{{.}}"
244             {{- end }}
245             {{- end }}
246             {{- if .Values.ric.robot.testsuites }}
247             {{- range .Values.ric.robot.testsuites }}
248             - "/robot/testsuites/{{.}}.robot"
249             {{- end }}
250             {{- else }}
251             - "/robot/testsuites"
252             {{- end }}
253           volumeMounts:
254             - name: robot-testsuites
255               mountPath: /robot/testsuites
256               readOnly: true
257             - name: robot-etc
258               mountPath: /robot/etc
259               readOnly: true
260             {{- if .Values.ric.robot.log }}
261             - name: robot-log
262               mountPath: /robot/log
263               readOnly: false
264             {{- end }}
265             # for compatability with the ric robot, we mount
266             # both properties files and interface libraries
267             # under resources/.
268 {{- range $map, $ignore := $.Files.Glob "configmap-src/*/properties/*.robot" }}
269             - name: robot-properties
270               mountPath: /robot/resources/{{ base $map }}
271               subPath: {{ base $map }}
272               readOnly: true
273 {{- end }}
274 {{- range $map, $ignore := $.Files.Glob "configmap-src/*/resources/*" }}
275             - name: robot-resources
276               mountPath: /robot/resources/{{ base $map }}
277               subPath: {{ base $map }}
278               readOnly: true
279 {{- end }}
280       volumes:
281         - name: robot-etc
282           emptyDir: {}
283         - name: robot-log
284         {{- if .Values.ric.robot.log }}
285           hostPath:
286            path: {{ default "/opt/ric/robot/log"  .Values.ric.robot.log }}
287            type: DirectoryOrCreate
288         {{- end }}
289         - name: robot-bin
290           configMap:
291            name: robot-bin
292            defaultMode: 0755
293         - name: robot-testsuites
294           configMap:
295            name: robot-testsuites
296            defaultMode: 0644
297         - name: robot-properties
298           configMap:
299            name: robot-properties
300            defaultMode: 0644
301         - name: robot-resources
302           configMap:
303            name: robot-resources
304            defaultMode: 0644
305