Skip to content

Commit

Permalink
feat: RHINENG-9589 add autopromotion pipeline tests
Browse files Browse the repository at this point in the history
  • Loading branch information
RoamingNoMaD committed Jun 27, 2024
1 parent 2fd63b2 commit 9f526c1
Show file tree
Hide file tree
Showing 10 changed files with 196 additions and 1 deletion.
7 changes: 7 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ USER root
RUN dnf -y upgrade && \
dnf -y clean all

RUN curl --output oc.tar.gz \
https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable/openshift-client-linux.tar.gz && \
tar -xvf oc.tar.gz oc && \
mv oc /usr/local/bin/ && \
rm oc.tar.gz

USER ${USER_UID}

COPY requirements.yml ${HOME}/requirements.yml
Expand All @@ -16,3 +22,4 @@ RUN ansible-galaxy collection install -r ${HOME}/requirements.yml \
COPY watches.yaml ${HOME}/watches.yaml
COPY roles/ ${HOME}/roles/
COPY playbooks/ ${HOME}/playbooks/
COPY stage_test.sh ${HOME}/stage_test.sh
9 changes: 8 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,9 @@ IMG ?= $(IMAGE_TAG_BASE):$(VERSION)
# Build parameters
IMG_BUILD_PARAMS ?=

# OpenShift Template file
# OpenShift Template files
OPENSHIFT_TEMPLATE ?= deploy_template.yaml
OPENSHIFT_STAGE_TEST_TEMPLATE ?= stage_test_template.yaml

.PHONY: all
all: podman-build
Expand Down Expand Up @@ -146,6 +147,12 @@ openshift-template: kustomize
config/plugins/openshift_template_generator.rb config/templated/template_params.yaml \
> "${OPENSHIFT_TEMPLATE}"

.PHONY: openshift-stage-test-template
openshift-stage-test-template: kustomize
$(KUSTOMIZE) build config/stage_test | \
config/plugins/openshift_stage_test_template_generator.rb \
> "${OPENSHIFT_STAGE_TEST_TEMPLATE}"

.PHONY: ansible-operator
ANSIBLE_OPERATOR = $(shell pwd)/bin/ansible-operator
ansible-operator: ## Download ansible-operator locally if necessary, preferring the $(pwd)/bin path over global if both exist.
Expand Down
20 changes: 20 additions & 0 deletions config/plugins/openshift_stage_test_template_generator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/ruby

require 'yaml'

objects = YAML.load_stream(STDIN)

# Replacing 'name' key with 'generateName' key ensuring Job name uniqueness in the staging environment
objects[3]['metadata']['name'] += '-'
objects[3]['metadata']['generateName'] = objects[3]['metadata'].delete('name')

template = {
'apiVersion' => 'v1',
'kind' => 'Template',
'metadata' => {
'name' => 'floorist-operator-stage-test'
},
'objects' => objects
}

YAML.dump(template, STDOUT)
22 changes: 22 additions & 0 deletions config/stage_test/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

# Adds namespace to all resources.
namespace: floorist-operator-system

# Value of this field is prepended to the
# names of all resources, e.g. a deployment named
# "wordpress" becomes "alices-wordpress".
# Note that it should also match with the prefix (text before '-') of the namespace
# field above.
namePrefix: floorist-operator-

# Labels to add to all resources and selectors.
#commonLabels:
# someName: someValue

resources:
- stage_test_service_account.yaml
- stage_test_role.yaml
- stage_test_role_binding.yaml
- stage_test.yaml
23 changes: 23 additions & 0 deletions config/stage_test/stage_test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
apiVersion: batch/v1
kind: Job
metadata:
name: stage-test
spec:
template:
spec:
restartPolicy: Never
serviceAccountName: stage-test-service-account
containers:
- image: quay.io/cloudservices/floorist-operator:latest
name: floorist-operator-stage-test
imagePullPolicy: Always
command:
- sh
args:
- stage_test.sh
resources:
requests:
memory: 256Mi
cpu: 300m
limits:
memory: 512Mi
14 changes: 14 additions & 0 deletions config/stage_test/stage_test_role.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: stage-test-role
rules:
- apiGroups:
- batch
resources:
- cronjobs
- jobs
verbs:
- get
- list
- watch
11 changes: 11 additions & 0 deletions config/stage_test/stage_test_role_binding.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: stage-test-rolebinding
roleRef:
kind: Role
name: stage-test-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: stage-test-service-account
4 changes: 4 additions & 0 deletions config/stage_test/stage_test_service_account.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: stage-test-service-account
24 changes: 24 additions & 0 deletions stage_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/bash

# Get names of all cronjobs, if not found any ignore the error message
# to not let k8s raise an error with an exit code indicating success
CRONJOBS=$(oc get cronjobs 2>/dev/null | awk 'NR>1 {print $1}')

if [ -z "$CRONJOBS" ]; then
echo "ERROR: no cronjobs found"
exit 1
fi

for CRONJOB in $CRONJOBS; do
SUCCESS=$(oc get job -l "pod=${CRONJOB}" -o jsonpath='{.items[].status.succeeded}{"\n"}')

if [ -z "$SUCCESS" ]; then
echo "ERROR: cronjob $CRONJOB has not created any jobs"
exit 1
fi

if [ "$SUCCESS" != "1" ]; then
echo "ERROR: cronjob $CRONJOB has not created successful jobs"
exit 1
fi
done
63 changes: 63 additions & 0 deletions stage_test_template.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
apiVersion: v1
kind: Template
metadata:
name: floorist-operator-stage-test
objects:
- apiVersion: v1
kind: ServiceAccount
metadata:
name: floorist-operator-stage-test-service-account
namespace: floorist-operator-system
- apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: floorist-operator-stage-test-role
namespace: floorist-operator-system
rules:
- apiGroups:
- batch
resources:
- cronjobs
- jobs
verbs:
- get
- list
- watch
- apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: floorist-operator-stage-test-rolebinding
namespace: floorist-operator-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: floorist-operator-stage-test-role
subjects:
- kind: ServiceAccount
name: floorist-operator-stage-test-service-account
namespace: floorist-operator-system
- apiVersion: batch/v1
kind: Job
metadata:
namespace: floorist-operator-system
generateName: floorist-operator-stage-test-
spec:
template:
spec:
containers:
- args:
- stage_test.sh
command:
- sh
image: quay.io/rhn_engineering_jvasik/floorist-operator:latest
imagePullPolicy: Always
name: floorist-operator-stage-test
resources:
limits:
memory: 512Mi
requests:
cpu: 300m
memory: 256Mi
restartPolicy: Never
serviceAccountName: floorist-operator-stage-test-service-account

0 comments on commit 9f526c1

Please sign in to comment.