-
Notifications
You must be signed in to change notification settings - Fork 0
/
task.yaml
261 lines (230 loc) · 8.98 KB
/
task.yaml
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
---
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: podman-backend-e2e
labels:
app.kubernetes.io/version: "5.0.0"
redhat.com/product: podman-backend
dev.lifecycle.io/phase: testing
annotations:
tekton.dev/pipelines.minVersion: "0.24.x"
tekton.dev/categories: podman-backend
tekton.dev/tags: podman-backend, testing
tekton.dev/displayName: "testing for podman-backend"
tekton.dev/platforms: "linux/amd64"
spec:
description: >-
This task will run qe testing on a podman installation where podman functionality is offered through a backend (typically a machine offering a podman socket)
This task make use of suite of tests from podman and run them on top of installation based on podman backend:
* podman
* crc-microshift
* crc-openshift
params:
# Target host params
- name: host
description: host to connect to the provisioned machine
- name: username
description: username to connect to the provisioned machine
- name: key
description: key file name to connect to the provisioned machine within the workspace resources path
- name: workspace-resources-path
description: path on workspace to find resources to connect and managed provisioned machine
- name: os
description: type of platform per target host (linux, windows, macos)
default: windows
- name: os-version
description: version for the target os
default: ''
- name: arch
description: type of arch per target host (linux, windows, macos)
default: amd64
# Podman params
- name: podman-version
description: podman version to be tested
default: '5.0.0'
- name: podman-backend
description: |
backend providing podman functionality. Allowed values:
(For podman the behaviour can be controlled within other params as podman-install and podman-start):
(For crc options it is expected crc is already installed on the target):
* podman
* crc-microshift (This requires set crc-secret param)
* crc-openshift (This requires set crc-secret param)
default: crc-microshift
- name: podman-install
description: If podman set as podman-backed in case podman-install true it will download and install podman version from github
default: 'false'
- name: podman-start
description: If podman set as podman-backed in case podman-start true it will init and start the podman machine
default: 'false'
- name: podman-provider
description: Set the provider to be tested for podman machine
default: "''"
- name: podman-opts
description: Pass podman opts to the execution
default: "''"
# Result params
- name: worspace-qe-subpath
description: subpath relative to workspace path where results are stored
default: qe-results
- name: junit-filename
description: junit results filename
default: podman-e2e.xml
# Control params
- name: debug
description: debug purposes extend verbosity on cmds executed on the target
default: 'false'
- name: cleanup-target
description: remove all assets moved into the target host
default: 'true'
- name: monitoring-enabled
description: If true will run node exporter on target host and guest machine and collect metrics during e2e execution
default: 'false'
results:
- name: duration
description: total amount of time in seconds for the qe execution
steps:
- name: e2e
image: quay.io/rhqp/podman-backend-e2e:v5.0.0-$(params.os)-$(params.arch)
imagePullPolicy: Always
script: |
#!/bin/bash
set -xuo
# Prepare ENVs
SECONDS=0
DEBUG=$(params.debug)
TARGET_HOST=$(params.host)
TARGET_HOST_USERNAME=$(params.username)
TARGET_HOST_KEY_PATH=$(workspaces.pipelines-data.path)/$(params.workspace-resources-path)/$(params.key)
chmod 600 ${TARGET_HOST_KEY_PATH}
TARGET_FOLDER=podman-backend-e2e
TARGET_RESULTS=$(params.junit-filename)
TARGET_CLEANUP=$(params.cleanup-target)
OUTPUT_FOLDER=$(workspaces.pipelines-data.path)/$(params.workspace-resources-path)/$(params.worspace-qe-subpath)
mkdir -p "${OUTPUT_FOLDER}"
# Pull secret (if exists)
if test -f /opt/crc/pullsecret; then
# ASSETS_FOLDER ENV is defined at Containerfile
# All assets inside that folder will be copied to the target host
cp /opt/crc/pullsecret ${ASSETS_FOLDER}
fi
# Create command
cmd=""
case "$(params.os)" in
windows)
cmd="${TARGET_FOLDER}/run.ps1 -podmanVersion $(params.podman-version) "
cmd="$cmd -targetFolder ${TARGET_FOLDER} "
cmd="$cmd -junitResultsFilename ${TARGET_RESULTS} "
cmd="$cmd -backend $(params.podman-backend) "
cmd="$cmd -podmanInstall $(params.podman-install) "
cmd="$cmd -podmanStart $(params.podman-start) "
cmd="$cmd -pullsecretFilename pullsecret "
if [[ $(params.podman-provider) != "" ]]; then
cmd="$cmd -podmanProvider $(params.podman-provider) "
fi
if [[ $(params.podman-opts) != "" ]]; then
cmd="$cmd -podmanOpts $(params.podman-opts) "
fi
cmd="$cmd -monitoringEnable $(params.monitoring-enabled) "
;;
darwin)
cmd="PODMAN_VERSION=$(params.podman-version) "
cmd="$cmd TARGET_FOLDER=${TARGET_FOLDER} "
cmd="$cmd JUNIT_RESULTS_FILENAME=${TARGET_RESULTS} "
cmd="$cmd BACKEND=$(params.podman-backend) "
cmd="$cmd PODMAN_INSTALL=$(params.podman-install) "
cmd="$cmd PODMAN_START=$(params.podman-start) "
cmd="$cmd PULLSECRET_FILENAME=pullsecret "
cmd="$cmd ARCH=$(params.arch) "
if [[ $(params.podman-provider) != "" ]]; then
cmd="$cmd PODMAN_PROVIDER=$(params.podman-provider) "
fi
if [[ $(params.podman-opts) != "" ]]; then
cmd="$cmd PODMAN_OPTS=$(params.podman-opts) "
fi
cmd="$cmd MONITORING_ENABLE=$(params.monitoring-enabled) "
cmd="$cmd ${TARGET_FOLDER}/run.sh"
;;
*)
echo "$(params.os) is not supported"
exit 1
;;
esac
# Exec
. entrypoint.sh "${cmd}"
if [[ $(params.monitoring-enabled) == "true" ]]; then
# Create snapshot with performance metrics during e2e
curl -XPOST localhost:9090/api/v1/admin/tsdb/snapshot > snaphost-creation.json
# Use jq to get the snapshot compress and change name
# https://github.com/adrianriobo/deliverest/issues/26
apk add jq
snap_id=$(jq -r '.data.name' snaphost-creation.json)
# Check content
pushd $(workspaces.pipelines-data.path)/$(params.workspace-resources-path)/tmp-prom-$(params.podman-provider)/snapshots
tar -zcvf prom-$(params.podman-provider).tar.gz ${snap_id}
cp prom-$(params.podman-provider).tar.gz $(workspaces.pipelines-data.path)/$(params.workspace-resources-path)/$(params.worspace-qe-subpath)
fi
# Results
echo -n "${SECONDS}" | tee $(results.duration.path)
resources:
requests:
memory: "50Mi"
cpu: "5m"
limits:
memory: "70Mi"
cpu: "10m"
sidecars:
- name: performance-db
image: quay.io/prometheus/prometheus:v2.45.3
script: |
#!/bin/sh
set -exuo
if [[ $(params.monitoring-enabled) == "true" ]]; then
cat <<EOF > /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: $(params.podman-provider)
static_configs:
- targets: ['$(params.host):9100']
labels:
provider: $(params.podman-provider)
os: $(params.os)
osversion: $(params.os-version)
arch: $(params.arch)
target: host
- targets: ['$(params.host):52200']
labels:
provider: $(params.podman-provider)
os: $(params.os)
osversion: $(params.os-version)
arch: $(params.arch)
target: machine
EOF
DATA_FOLDER="$(workspaces.pipelines-data.path)/$(params.workspace-resources-path)/tmp-prom-$(params.podman-provider)"
mkdir -p "${DATA_FOLDER}"
# Run prometheus to scrap the metrics while running tests
exec prometheus --config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path="${DATA_FOLDER}" \
--web.enable-admin-api
fi
volumeMounts:
- name: $(workspaces.pipelines-data.volume)
mountPath: $(workspaces.pipelines-data.path)
workspaces:
- name: pipelines-data
- name: ocp-pullsecret
optional: true
description: |
crc secret name holding the pullsecret. This is only required if backed tested is crc preset
secret should match following format:
---
apiVersion: v1
kind: Secret
metadata:
name: ${secret-name}
type: Opaque
data:
pullsecret: ${pullsecret-value}
mountPath: /opt/crc