Adapt the integration playbook to be usable locally

This change adds some utility files to help with
running the zuul job locally.

Change-Id: I427ca493e456f4d80350921212d3bbcccbf1c6be
This commit is contained in:
Tristan Cacqueray 2020-03-20 16:13:19 +00:00
parent 62559c274d
commit 28ea866426
9 changed files with 135 additions and 31 deletions

View File

@ -31,7 +31,7 @@ alias dhall-to-yaml="$CR run --rm --entrypoint dhall-to-yaml -i docker.io/zuul/z
alias yaml-to-dhall="$CR run --rm --entrypoint yaml-to-dhall -i docker.io/zuul/zuul-operator"
```
## Evaluate the dhall expression manually:
## Evaluate the dhall expression manually
First you need to convert a CR spec to a dhall record, for example using the test file `playbooks/files/cr_spec.yaml`:
@ -56,6 +56,7 @@ dhall-to-yaml --omit-empty <<< "(./conf/zuul/resources.dhall ($INPUT)).List"
Given a working `~/.kube/config` context, you can execute the Ansible roles directly using:
```bash
export ANSIBLE_CONFIG=playbooks/files/ansible.cfg
ansible-playbook -v playbooks/files/local.yaml
```
@ -64,3 +65,40 @@ Then cleanup the resources using:
```bash
ansible-playbook -v playbooks/files/local.yaml -e k8s_state=absent
```
## Run the integration test locally
First you need to build the operator image:
```bash
make build
```
Or you can update an existing image with the local dhall and ansible content:
```bash
./playbooks/files/update-operator.sh
```
Then you can run the job using:
```bash
ansible-playbook -e @playbooks/files/local-vars.yaml -v playbooks/zuul-operator-functional/run.yaml
ansible-playbook -e @playbooks/files/local-vars.yaml -v playbooks/zuul-operator-functional/test.yaml
```
Alternatively, you can run the job without using the operator pod by including the ansible role directly.
To do that run the playbooks with:
```
ansible-playbook -e use_local_role=true ...
```
## Delete all kubernetes resources
To wipe your namespace run this command:
```bash
kubectl delete $(for obj in statefulset deployment service secret; do kubectl get $obj -o name; done)
```

View File

@ -0,0 +1,3 @@
[defaults]
roles_path = ../../roles/
inventory = hosts.yaml

View File

@ -0,0 +1,2 @@
[all]
localhost ansible_connection=local

View File

@ -0,0 +1,9 @@
# A local vars file to run the zuul jobs locally:
# ansible-playbook -i playbooks/files/hosts.yaml -e @playbooks/files/local-vars.yaml -v playbooks/zuul-operator-functional/run.yaml -e use_local_role=true
---
namespace: default
zuul_app_path: "/home/fedora/src/opendev.org/zuul/zuul-operator/conf/zuul"
zuul:
projects:
'opendev.org/zuul/zuul-operator':
src_dir: "{{ ansible_user_dir|default(ansible_env.HOME) }}/src/opendev.org/zuul/zuul-operator"

View File

@ -1 +0,0 @@
../../roles/

View File

@ -0,0 +1,20 @@
#!/bin/bash -e
# Update the operator image
echo "Remove previous operator"
kubectl delete -f deploy/operator.yaml || :
BUILDAH_OPTS=${BUILDAH_OPTS:-}
if test -d /var/lib/silverkube/storage; then
BUILDAH_OPTS="${BUILDAH_OPTS} --root /var/lib/silverkube/storage --storage-driver vfs"
fi
echo "Update local image"
CTX=$(sudo buildah from ${BUILDAH_OPTS} docker.io/zuul/zuul-operator:latest)
MNT=$(sudo buildah mount ${BUILDAH_OPTS} $CTX)
sudo rsync -avi --delete roles/ ${MNT}/opt/ansible/roles/
sudo rsync -avi --delete conf/ ${MNT}/opt/ansible/conf/
sudo buildah commit ${BUILDAH_OPTS} --rm ${CTX} docker.io/zuul/zuul-operator:latest
kubectl apply -f deploy/operator.yaml

View File

@ -84,9 +84,30 @@
current-context: local
- name: Deploy CR
command: make deploy-cr
args:
chdir: "{{ zuul.projects['opendev.org/zuul/zuul-operator'].src_dir }}"
include_tasks: tasks/apply_cr.yaml
vars:
spec:
executor:
count: 1
ssh_key:
secretName: executor-ssh-key
merger:
count: 1
scheduler:
config:
secretName: zuul-yaml-conf
launcher:
config:
secretName: nodepool-yaml-conf
connections:
gits:
- baseurl: https://opendev.org
name: opendev.org
external_config:
kubernetes:
secretName: nodepool-kube-config
key: kube.config
- name: Wait maximum 4 minutes for the scheduler pod
shell: |

View File

@ -0,0 +1,16 @@
---
- name: Apply Zuul CR
when: use_local_role is not defined
k8s:
namespace: "{{ namespace }}"
definition:
apiVersion: operator.zuul-ci.org/v1alpha1
kind: Zuul
metadata:
name: zuul
spec: "{{ spec }}"
- name: Run Zuul CR directly
when: use_local_role is defined
include_role:
name: zuul

View File

@ -62,13 +62,9 @@
name: "zuul-yaml-conf"
stringData:
main.yaml: "{{ tenants | to_yaml }}"
- k8s:
namespace: default
definition:
apiVersion: operator.zuul-ci.org/v1alpha1
kind: Zuul
metadata:
name: zuul
- include_tasks: tasks/apply_cr.yaml
vars:
spec:
executor:
count: 1