#58 test refactor
Merged 2 years ago by lrossett. Opened 2 years ago by lrossett.
kube-sig/ lrossett/koji-operator test-refactor  into  main

file modified
+3
@@ -12,3 +12,6 @@ 

  *.swp

  *.swo

  *~

+ 

+ molecule/_logs/*

+ !molecule/_logs/.keepme

@@ -0,0 +1,3 @@ 

+ ---

+ - debug:

+     msg: "Skip me"

@@ -0,0 +1,9 @@ 

+ ---

+ - name: Start minikube

+   command: |

+     minikube start \

+     --driver={{ minikube_driver }}

+ 

+ - name: Sleep for 10 seconds and continue with play

+   wait_for:

+     timeout: 10

@@ -0,0 +1,8 @@ 

+ ---

+ - name: Destroy minikube

+   command: minikube delete

+ 

+       # - name: Unset pull policy

+       #   command: '{{ kustomize }} edit remove patch pull_policy/{{ operator_pull_policy }}.yaml'

+       #   args:

+       #     chdir: '{{ config_dir }}/testing'

operator/molecule/_backends/cluster/minikube/molecule.yml operator/molecule/minikube/molecule.yml
file renamed
file was moved with no change to the file
operator/molecule/_backends/cluster/minikube/prepare.yml operator/molecule/minikube/create.yml
file renamed
+29 -41
@@ -1,43 +1,31 @@ 

  ---

- - name: Create

-   hosts: localhost

-   connection: local

-   gather_facts: false

-   tasks:

-     - block:

-         - name: Start minikube

-           command: minikube start --driver={{ minikube_driver }}

+ - block:

+     - name: Enable kubevirt

+       command: minikube addons enable kubevirt

+     

+     - name: Wait for kubevirt namespace

+       k8s_info:

+         api_version: v1

+         kind: Namespace

+         name: kubevirt

+       register: out

+       retries: 180

+       delay: 3

+       until:

+         - "out.resources | length == 1"

  

-         - name: Sleep for 10 seconds and continue with play

-           wait_for:

-             timeout: 10

- 

-         - block:

-             - name: Enable kubevirt

-               command: minikube addons enable kubevirt

-             - name: Wait for kubevirt namespace

-               k8s_info:

-                 api_version: v1

-                 kind: Namespace

-                 name: kubevirt

-               register: out

-               retries: 180

-               delay: 3

-               until:

-                 - "out.resources | length == 1"

- 

-             - k8s_info:

-                 api_version: kubevirt.io/v1

-                 kind: KubeVirt

-                 namespace: kubevirt

-                 name: kubevirt

-               register: out

-               retries: 300

-               delay: 3

-               until:

-                 - "'resources' in out"

-                 - "out.resources | length > 0"

-                 - "'status' in out.resources[0]"

-                 - "out.resources[0].status.phase == 'Deployed'"

-           when: "minikube_driver == 'kvm2'"

-       when: minikube_skip == 'N'

+     - k8s_info:

+         api_version: kubevirt.io/v1

+         kind: KubeVirt

+         namespace: kubevirt

+         name: kubevirt

+       register: out

+       retries: 300

+       delay: 3

+       until:

+         - "'resources' in out"

+         - "out.resources | length > 0"

+         - "'status' in out.resources[0]"

+         - "out.resources[0].status.phase == 'Deployed'"

+   when:

+     - "minikube_driver == 'kvm2'"

operator/molecule/_backends/cluster/minikube/requirements.yml operator/molecule/cluster/requirements.yml
file renamed
file was moved with no change to the file
@@ -0,0 +1,13 @@ 

+ - name: Show image name

+   debug:

+     msg: "Building {{ image_name }}:{{ image_tag }} container image"

+ 

+ - name: Build container image

+   command: |

+     minikube

+     image build

+     -t {{ image_name }}:{{ image_tag }} \

+     .

+   args:

+     chdir: "{{ image_dir }}"

+   changed_when: false

@@ -0,0 +1,3 @@ 

+ - name: Skip tasks

+   debug:

+     msg: "Skip me"

@@ -0,0 +1,3 @@ 

+ - name: Skip tasks

+   debug:

+     msg: "Skip me"

@@ -0,0 +1,12 @@ 

+ - name: Show image name

+   debug:

+     msg: "Building {{ podman_image_name }}:{{ podman_image_tag }} container image"

+ 

+ - name: Build container image

+   containers.podman.podman_image:

+     build:

+       format: "{{ podman_image_format | default('docker') }}"

+     path: "{{ podman_image_path }}"

+     name: "{{ podman_image_name }}"

+     tag: "{{ podman_image_tag }}"

+     push: "{{ podman_image_push | default(false) }}"

@@ -0,0 +1,13 @@ 

+ - name: Check if podman is available

+   ansible.builtin.stat:

+     path: "{{ podman_bin }}"

+   register: podman_bin_res

+ 

+ - name: Assert podman bin

+   ansible.builtin.fail:

+     msg: "Unable to find {{ podman_bin }}"

+   when: podman_bin_res.stat.exists == false

+ 

+ - name: Run podman info

+   ansible.builtin.shell: "{{ podman_bin }} info"

+   changed_when: false

@@ -0,0 +1,10 @@ 

+ - name: Show image name

+   debug:

+     msg: "Deleting {{ podman_image_name }}:{{ podman_image_tag }} container image"

+ 

+ - name: Delete container image

+   containers.podman.podman_image:

+     name: "{{ podman_image_name }}"

+     tag: "{{ podman_image_tag }}"

+     push: "{{ podman_image_push | default(false) }}"

+     state: absent

@@ -0,0 +1,30 @@ 

+ - name: Create buildsys.apps.fedoraproject.org/v1alpha1.KojiBuilder

+   k8s:

+     state: present

+     namespace: '{{ namespace }}'

+     definition:

+       apiVersion: buildsys.apps.fedoraproject.org/v1alpha1

+       kind: KojiBuilder

+       metadata:

+         name: sample

+         annotations:

+           buildsys.apps.fedoraproject.org/hub: sample/osdk-test

+       spec:

+         image: quay.io/fedora/koji-builder:f34

+         type: repo

+         max_jobs: 5

+         archs:

+           - x86_64

+         channels:

+           - createrepo

+         ssl_verify: false

+         volume: true

+     wait: yes

+     wait_timeout: 300

+     wait_condition:

+       type: Running

+       reason: Successful

+       status: "True"

+   vars:

+     cr_file: 'buildsys_v1alpha1_kojibuilder.yaml'

+   register: k8s_cr_kojibuilder_container

operator/molecule/_components/koji-builder/container/verify.yml operator/molecule/default/tasks/kojibuilder_test.yml
file renamed
-32
@@ -1,34 +1,3 @@ 

- ---

- - name: Create the buildsys.apps.fedoraproject.org/v1alpha1.KojiBuilder

-   k8s:

-     state: present

-     namespace: '{{ namespace }}'

-     definition:

-       apiVersion: buildsys.apps.fedoraproject.org/v1alpha1

-       kind: KojiBuilder

-       metadata:

-         name: sample

-         annotations:

-           buildsys.apps.fedoraproject.org/hub: sample/osdk-test

-       spec:

-         image: quay.io/fedora/koji-builder:f34

-         type: repo

-         max_jobs: 5

-         archs:

-           - x86_64

-         channels:

-           - createrepo

-         ssl_verify: false

-         volume: true

-     wait: yes

-     wait_timeout: 300

-     wait_condition:

-       type: Running

-       reason: Successful

-       status: "True"

-   vars:

-     cr_file: 'buildsys_v1alpha1_kojibuilder.yaml'

- 

  - block:

      - name: 'TEST: kojibuilder.configmap'

        k8s_info:
@@ -82,4 +51,3 @@ 

          name: sample

          wait: yes

          wait_timeout: 300

- 

@@ -0,0 +1,29 @@ 

+ - name: Create buildsys.apps.fedoraproject.org/v1alpha1.KojiBuilder (kubevirt)

+   k8s:

+     state: present

+     namespace: "{{ namespace }}"

+     definition:

+       apiVersion: buildsys.apps.fedoraproject.org/v1alpha1

+       kind: KojiBuilder

+       metadata:

+         name: sample-virt

+         annotations:

+           buildsys.apps.fedoraproject.org/hub: sample/osdk-test

+       spec:

+         image: quay.io/fedora-kube-sig/koji-builder-kubevirt:raw

+         type: kubevirt

+         max_jobs: 5

+         archs:

+           - x86_64

+         channels:

+           - default

+         ssl_verify: false

+         volume: false

+         running: true

+     wait: yes

+     wait_timeout: 1800

+     wait_condition:

+       type: Running

+       reason: Successful

+       status: "True"

+   register: k8s_cr_kojibuilder_kubevirt

@@ -0,0 +1,27 @@ 

+ - block:

+     - name: 'TEST: kojibuilder.configmap'

+       k8s_info:

+         api_version: v1

+         kind: ConfigMap

+         namespace: "{{ namespace }}"

+         name: kojid-sample-virt-conf

+       register: koji_configmap

+     - assert:

+         that:

+           - koji_configmap.resources|length == 1

+           - koji_configmap.resources[0].metadata.labels['app'] == 'koji-builder'

+           - "'kojid.conf' in koji_configmap.resources[0].data"

+ 

+ - block:

+     - name: 'TEST: kojibuilder.secret.client-cert'

+       k8s_info:

+         api_version: v1

+         kind: Secret

+         namespace: "{{ namespace }}"

+         name: kojid-sample-virt-client-cert

+       register: kojibuilder_client_secrets

+     - assert:

+         that:

+           - kojibuilder_client_secrets.resources|length == 1

+           - kojibuilder_client_secrets.resources[0].metadata.labels['app'] == 'koji-builder'

+           - "'client.pem' in kojibuilder_client_secrets.resources[0].data" 

@@ -0,0 +1,13 @@ 

+ - name: Create buildsys.apps.fedoraproject.org/v1alpha1.KojiHub

+   k8s:

+     state: present

+     namespace: '{{ namespace }}'

+     definition: "{{ lookup('template', '/'.join([samples_dir, cr_file])) | from_yaml }}"

+     wait: yes

+     wait_timeout: 300

+     wait_condition:

+       type: Running

+       reason: Successful

+       status: "True"

+   vars:

+     cr_file: 'buildsys_v1alpha1_kojihub.yaml'

operator/molecule/_components/koji-hub/verify.yml operator/molecule/default/tasks/kojihub_test.yml
file renamed
-14
@@ -1,18 +1,4 @@ 

  ---

- - name: Create the buildsys.apps.fedoraproject.org/v1alpha1.MBKojiHub

-   k8s:

-     state: present

-     namespace: '{{ namespace }}'

-     definition: "{{ lookup('template', '/'.join([samples_dir, cr_file])) | from_yaml }}"

-     wait: yes

-     wait_timeout: 300

-     wait_condition:

-       type: Running

-       reason: Successful

-       status: "True"

-   vars:

-     cr_file: 'buildsys_v1alpha1_kojihub.yaml'

- 

  - block:

    - name: 'TEST: koji_hub.configmap'

      k8s_info:

@@ -0,0 +1,25 @@ 

+ ---

+ - name: Create buildsys.apps.fedoraproject.org/v1alpha1.Kojira

+   kubernetes.core.k8s:

+     state: present

+     namespace: '{{ namespace }}'

+     definition:

+       apiVersion: buildsys.apps.fedoraproject.org/v1alpha1

+       kind: Kojira

+       metadata:

+         name: sample

+         annotations:

+           buildsys.apps.fedoraproject.org/hub: sample/osdk-test

+       spec:

+         replicas: 1

+         image: quay.io/fedora/kojira:f34

+         src: 'no'

+         max_repo_tasks: 15

+         repo_tasks_limit: 15

+     wait: yes

+     wait_timeout: 300

+     wait_condition:

+       type: Running

+       reason: Successful

+       status: "True"

+   register: k8s_cr_kojira

operator/molecule/_components/kojira/verify.yml operator/molecule/default/tasks/kojira_test.yml
file renamed
-25
@@ -1,28 +1,3 @@ 

- ---

- - name: Create the buildsys.apps.fedoraproject.org/v1alpha1.Kojira

-   k8s:

-     state: present

-     namespace: '{{ namespace }}'

-     definition:

-       apiVersion: buildsys.apps.fedoraproject.org/v1alpha1

-       kind: Kojira

-       metadata:

-         name: sample

-         annotations:

-           buildsys.apps.fedoraproject.org/hub: sample/osdk-test

-       spec:

-         replicas: 1

-         image: quay.io/fedora/kojira:f34

-         src: 'no'

-         max_repo_tasks: 15

-         repo_tasks_limit: 15

-     wait: yes

-     wait_timeout: 300

-     wait_condition:

-       type: Running

-       reason: Successful

-       status: "True"

- 

  - block:

      - name: 'TEST: kojira.configmap'

        k8s_info:

empty or binary file added
@@ -1,24 +0,0 @@ 

- ---

- - name: Converge

-   hosts: localhost

-   connection: local

-   gather_facts: no

- 

-   tasks:

-     - name: Build operator image

-       docker_image:

-         build:

-           path: '{{ project_dir }}'

-           pull: no

-         name: '{{ operator_image }}'

-         tag: latest

-         push: no

-         source: build

-         force_source: yes

- 

-     - name: Load image into minikube

-       command: minikube image load {{ operator_image }} --overwrite=true

- 

- 

- 

- - import_playbook: ../default/converge.yml

@@ -1,14 +0,0 @@ 

- ---

- - name: Create

-   hosts: localhost

-   connection: local

-   gather_facts: false

-   tasks:

-     - name: Ensure namespace exists

-       k8s:

-         api_version: v1

-         kind: Namespace

-         name: "{{ namespace }}"

-         state: present

-         wait: true

-          

@@ -1,21 +0,0 @@ 

- ---

- - name: Destroy

-   hosts: localhost

-   connection: local

-   gather_facts: false

-   collections:

-     - community.kubernetes

- 

-   tasks:

-     - name: Destroy namespace

-       k8s:

-         api_version: v1

-         kind: Namespace

-         name: "{{ namespace }}"

-         state: absent

-         wait: true

- 

-     - name: Unset pull policy

-       command: '{{ kustomize }} edit remove patch pull_policy/{{ operator_pull_policy }}.yaml'

-       args:

-         chdir: '{{ config_dir }}/testing'

@@ -1,54 +0,0 @@ 

- ---

- dependency:

-   name: galaxy

-   options:

-     requirements-file: requirements.yml

- driver:

-   name: delegated

- lint: |

-   set -e

-   yamllint -d "{extends: relaxed, rules: {line-length: {max: 120}}}" .

- platforms:

-   - name: cluster

-     groups:

-       - k8s

- provisioner:

-   name: ansible

-   playbooks:

-     verify: ../default/verify.yml

-     prepare: ../default/prepare.yml

-   lint: |

-     set -e

-     ansible-lint

-   inventory:

-     group_vars:

-       all:

-         namespace: ${TEST_OPERATOR_NAMESPACE:-osdk-test}

-         operator_image: buildsys.apps.fedoraproject.org/koji-operator:testing

-         operator_pull_policy: "Never"

-     host_vars:

-       localhost:

-         ansible_python_interpreter: '{{ ansible_playbook_python }}'

-         config_dir: ${MOLECULE_PROJECT_DIRECTORY}/config

-         samples_dir: ${MOLECULE_PROJECT_DIRECTORY}/config/samples

-         components_dir: ${MOLECULE_PROJECT_DIRECTORY}/../components

-         project_dir: ${MOLECULE_PROJECT_DIRECTORY}

-         operator_pull_policy: "Never"

-         kustomize: ${KUSTOMIZE_PATH:-kustomize}

- scenario:

-   name: cluster

-   test_sequence:

-     # - lint

-     - destroy

-     - dependency

-     - syntax

-     - create

-     - prepare

-     - converge

-     - verify

-     - destroy

- verifier:

-   name: ansible

-   lint: |

-     set -e

-     ansible-lint

@@ -1,22 +0,0 @@ 

- ---

- - name: Create

-   hosts: localhost

-   connection: local

-   gather_facts: false

-   tasks:

-     - name: Enable kubevirt

-       command: minikube addons enable kubevirt

-       when: "minikube_driver == 'kvm2'"

- 

-     - name: Wait for kubevirt readiness

-       k8s_info:

-         api_version: kubevirt.io/v1

-         kind: KubeVirt

-         namespace: kubevirt

-         name: kubevirt

-         wait: true

-         wait_condition:

-           type: Available

-           reason: AllComponentsReady

-           status: "True"

- 

@@ -0,0 +1,15 @@ 

+ ***********************************

+ Delegated driver installation guide

+ ***********************************

+ 

+ Requirements

+ ============

+ 

+ This driver is delegated to the developer.  Up to the developer to implement

+ requirements.

+ 

+ Install

+ =======

+ 

+ This driver is delegated to the developer.  Up to the developer to implement

+ requirements.

@@ -0,0 +1,16 @@ 

+ - name: Build kustomize testing overlay from folder

+   command: |

+     kustomize \

+     build \

+     --load-restrictor LoadRestrictionsNone .

+   args:

+     chdir: "{{ kustomize_source_dir }}"

+   register: resources

+   changed_when: false

+ 

+ - name: Create parsed k8s resources

+   k8s:

+     definition: "{{ item }}"

+     state: present

+     wait: true

+   loop: "{{ resources.stdout | from_yaml_all | list }}"

@@ -0,0 +1,24 @@ 

+ - name: Look for pod

+   kubernetes.core.k8s_info:

+     api_version: v1

+     kind: Pod

+     namespace: "{{ namespace }}"

+     label_selectors: "{{ log_labels }}"

+   register: k8s_info_out

+ 

+ - block:

+     - name: Retrieve pod log

+       kubernetes.core.k8s_log:

+         api_version: "v1"

+         kind: "Pod"

+         namespace: "{{ namespace }}"

+         container: "{{ log_container }}"

+         label_selectors: "{{ log_labels }}"

+       ignore_errors: true

+       register: out

+     

+     - name: Write pod log

+       ansible.builtin.copy:

+         content: "{{ out.log }}"

+         dest: "{{ logs_dir }}/{{ log_fname }}"

+   when: k8s_info_out.resources | length > 0

@@ -0,0 +1,19 @@ 

+ 

+ - name: CleanUp

+   hosts: localhost

+   connection: local

+   gather_facts: false

+   tasks:

+     - include_tasks: "{{ backends_dir }}/container/{{ backend_container }}/remove.yml"

+       vars:

+         podman_image_name: "{{ operator_image_name }}"

+         podman_image_tag: "{{ operator_image_tag }}"

+ 

+     - name: Unset pull policy

+       command: |

+         kustomize \

+         edit remove patch \

+         pull_policy/{{ operator_pull_policy }}.yaml

+       args:

+         chdir: "{{ config_dir }}/testing"

+       changed_when: false

@@ -2,22 +2,56 @@ 

  - name: Converge

    hosts: localhost

    connection: local

-   gather_facts: no

-   collections:

-     - community.kubernetes

-     - operator_sdk.util

- 

    tasks:

-     - name: Create Namespace

-       k8s:

+     - include_tasks: "{{ backends_dir }}/cluster/{{ backend_cluster }}/converge.yml" 

+ 

+     - name: Clean molecule/_logs folder

+       ansible.builtin.file:

+         state: absent

+         path: "{{ item }}"

+       with_fileglob:

+         - "{{ logs_dir }}/*.log"

+         - "{{ logs_dir }}/*.yaml"

+       run_once: true

+     

+     - name: Create operator namespace

+       kubernetes.core.k8s:

+         state: present

+         wait: true

          api_version: v1

          kind: Namespace

-         name: '{{ namespace }}'

-         wait: true

+         name: "{{ namespace }}"

+ 

+     - name: Set testing image

+       command: |

+         kustomize \

+         edit set image \

+         testing={{ operator_image_name }}:{{ operator_image_tag  }}

+       args:

+         chdir: "{{ config_dir }}/testing"

+       changed_when: false

+ 

+     - name: Set pull policy

+       command: |

+         kustomize edit add patch \

+         --path pull_policy/{{ operator_pull_policy }}.yaml

+       args:

+         chdir: "{{ config_dir }}/testing"

+       changed_when: false

+ 

+     - name: Create operator CRDs

+       include_tasks: _kustomize.yml

+       vars:

+         kustomize_source_dir: "{{ config_dir }}/crd"

+     

+     - name: Deploy operator

+       include_tasks: _kustomize.yml

+       vars:

+         kustomize_source_dir: "{{ config_dir }}/testing"

  

      - name: Deploy postgres

        k8s:

-         src: "{{ components_dir }}/psql/{{ item }}"

+         src: "{{ services_dir }}/psql/{{ item }}"

          namespace: "{{ namespace }}"

          state: present

          wait: true
@@ -25,7 +59,3 @@ 

          - 0-secret.yaml

          - 1-deployment.yaml

          - 2-service.yaml

- 

-     - import_tasks: kustomize.yml

-       vars:

-         state: present

@@ -3,4 +3,15 @@ 

    hosts: localhost

    connection: local

    gather_facts: false

-   tasks: []

+   tasks:

+     - name: Show Cluster Backend

+       debug:

+         msg: "Using {{ backend_cluster }} as cluster backend"

+     

+     - name: Show Container Backend

+       debug:

+         msg: "Using {{ backend_container }} as container backend"

+ 

+     - include_tasks: "{{ backends_dir }}/container/{{ backend_container }}/preflight.yml"

+     

+     - include_tasks: "{{ backends_dir }}/cluster/{{ backend_cluster }}/create.yml"

@@ -3,22 +3,5 @@ 

    hosts: localhost

    connection: local

    gather_facts: false

-   collections:

-     - community.kubernetes

- 

    tasks:

-     - import_tasks: kustomize.yml

-       vars:

-         state: absent

- 

-     - name: Destroy Namespace

-       k8s:

-         api_version: v1

-         kind: Namespace

-         name: '{{ namespace }}'

-         state: absent

- 

-     - name: Unset pull policy

-       command: '{{ kustomize }} edit remove patch --path pull_policy/{{ operator_pull_policy }}.yaml'

-       args:

-         chdir: '{{ config_dir }}/testing'

+     - include_tasks: "{{ backends_dir }}/cluster/{{ backend_cluster }}/destroy.yml"

@@ -1,21 +0,0 @@ 

- ---

- - name: Build kustomize testing overlay

-   # load_restrictor must be set to none so we can load patch files from the default overlay

-   # updated to use "--load-restrictor LoadRestrictionsNone" for kustomize 4+

-   command: '{{ kustomize }} build  --load-restrictor LoadRestrictionsNone .'

-   args:

-     chdir: '{{ config_dir }}/testing'

-   register: resources

-   changed_when: false

- 

- - name: Set resources to {{ state }}

-   debug:

-     var: item

-   loop: '{{resources.stdout_lines }}'

- 

- - name: Set resources to {{ state }}

-   k8s:

-     definition: '{{ item }}'

-     state: '{{ state }}'

-     wait: yes

-   loop: '{{ resources.stdout | from_yaml_all | list }}'

@@ -3,9 +3,6 @@ 

    name: galaxy

  driver:

    name: delegated

-     # lint: |

-     #  set -e

-     #  yamllint -d "{extends: relaxed, rules: {}" .

  platforms:

    - name: cluster

      groups:
@@ -21,17 +18,30 @@ 

          namespace: ${TEST_OPERATOR_NAMESPACE:-osdk-test}

      host_vars:

        localhost:

-         ansible_python_interpreter: '{{ ansible_playbook_python }}'

-         config_dir: ${MOLECULE_PROJECT_DIRECTORY}/config

-         samples_dir: ${MOLECULE_PROJECT_DIRECTORY}/config/samples

-         components_dir: ${MOLECULE_PROJECT_DIRECTORY}/../components

-         operator_image: ${OPERATOR_IMAGE:-"quay.io/fedora/koji-operator:latest"}

-         operator_pull_policy: ${OPERATOR_PULL_POLICY:-"IfNotPresent"}

-         kustomize: ${KUSTOMIZE_PATH:-kustomize}

-   env:

-     K8S_AUTH_KUBECONFIG: ${KUBECONFIG:-"~/.kube/config"}

+         ansible_python_interpreter: "{{ ansible_playbook_python }}"

+         backends_dir: "${MOLECULE_PROJECT_DIRECTORY}/molecule/_backends"       

+         backend_cluster: "${BACKEND_CLUSTER:-minikube}"

+         backend_container: "${BACKEND_CLUSTER:-minikube}"

+         config_dir: "${MOLECULE_PROJECT_DIRECTORY}/config" 

+         project_dir: "${MOLECULE_PROJECT_DIRECTORY}"

+         services_dir: "${MOLECULE_PROJECT_DIRECTORY}/../components"

+         samples_dir: "${MOLECULE_PROJECT_DIRECTORY}/config/samples"

+         components_dir: "${MOLECULE_PROJECT_DIRECTORY}/molecule/_components"

+         logs_dir: "${MOLECULE_PROJECT_DIRECTORY}/molecule/_logs"

+         kubeconfig: "${KUBECONFIG:-'~/.kube/config'}"

+         operator_image_name: "${OPERATOR_IMAGE_NAME:-localhost.localdomain/koji-operator}"

+         operator_image_tag: "${OPERATOR_IMAGE_TAG:-testing}"

+         operator_pull_policy: "${OPERATOR_PULL_POLICY:-IfNotPresent}"

+         # _backends/container/podman vars

+         podman_bin: "${PODMAN_BIN:-/usr/bin/podman}"

+         # _backends/cluster/minikube vars

+         minikube_driver: "${MINIKUBE_DRIVER:-podman}"

+         # verify.yml vars

+         verify_kojihub: "${VERIFY_KOJIHUB:-true}"

+         verify_kojira: "${VERIFY_KOJIRA:-true}"

+         verify_kojibuilder_container: "${VERIFY_KOJIBUILDER_CONTAINER:-true}"

+         verify_kojibuilder_kubevirt: "${VERIFY_KOJIBUILDER_KUBEVIRT:-false}"

+     env:

+       K8S_AUTH_KUBECONFIG: ${KUBECONFIG:-"~/.kube/config"}

  verifier:

    name: ansible

-     #lint: |

-     #set -e

-     #ansible-lint

@@ -1,28 +1,12 @@ 

  ---

- - name: Prepare

+ - name: Converge

    hosts: localhost

    connection: local

-   gather_facts: false

- 

-   tasks:

-     - name: Ensure operator image is set

-       fail:

-         msg: |

-           You must specify the OPERATOR_IMAGE environment variable in order to run the

-           'default' scenario

-       when: not operator_image

- 

-     - name: Set testing image

-       command: '{{ kustomize }} edit set image testing={{ operator_image }}'

-       args:

-         chdir: '{{ config_dir }}/testing'

- 

-     - name: Set pull policy

-       command: '{{ kustomize }} edit add patch --path pull_policy/{{ operator_pull_policy }}.yaml'

-       args:

-         chdir: '{{ config_dir }}/testing'

- 

-     - name: Set testing namespace

-       command: '{{ kustomize }} edit set namespace {{ namespace }}'

-       args:

-         chdir: '{{ config_dir }}/testing'

+   tasks: 

+     - include_tasks: "{{ backends_dir }}/cluster/{{ backend_cluster }}/prepare.yml" 

+ 

+     - include_tasks: "{{ backends_dir }}/container/{{ backend_container }}/build.yml"

+       vars:

+         image_dir: "{{ project_dir }}"

+         image_name: "{{ operator_image_name }}"

+         image_tag: "{{ operator_image_tag }}"

@@ -1,100 +0,0 @@ 

- ---

- - name: Create the buildsys.apps.fedoraproject.org/v1alpha1.KojiBuilder (kubevirt)

-   k8s:

-     state: present

-     namespace: '{{ namespace }}'

-     definition:

-       apiVersion: buildsys.apps.fedoraproject.org/v1alpha1

-       kind: KojiBuilder

-       metadata:

-         name: sample-virt

-         annotations:

-           buildsys.apps.fedoraproject.org/hub: sample/osdk-test

-       spec:

-         image: quay.io/fedora-kube-sig/koji-builder-kubevirt:raw

-         type: kubevirt

-         max_jobs: 5

-         archs:

-           - x86_64

-         channels:

-           - default

-         ssl_verify: false

-         volume: false

-         running: true

-     wait: yes

-     wait_timeout: 1800

-     wait_condition:

-       type: Running

-       reason: Successful

-       status: "True"

- 

- - block:

-     - name: 'TEST: kojibuilder.configmap'

-       k8s_info:

-         api_version: v1

-         kind: ConfigMap

-         namespace: "{{ namespace }}"

-         name: kojid-sample-virt-conf

-       register: koji_configmap

-     - assert:

-         that:

-           - koji_configmap.resources|length == 1

-           - koji_configmap.resources[0].metadata.labels['app'] == 'koji-builder'

-           - "'kojid.conf' in koji_configmap.resources[0].data"

- 

- - block:

-     - name: 'TEST: kojibuilder.secret.client-cert'

-       k8s_info:

-         api_version: v1

-         kind: Secret

-         namespace: "{{ namespace }}"

-         name: kojid-sample-virt-client-cert

-       register: kojibuilder_client_secrets

-     - assert:

-         that:

-           - kojibuilder_client_secrets.resources|length == 1

-           - kojibuilder_client_secrets.resources[0].metadata.labels['app'] == 'koji-builder'

-           - "'client.pem' in kojibuilder_client_secrets.resources[0].data"

-             #- block:

-             #    - name: 'TEST: kojibuilder.secret.ssh-key'

-             #      k8s_info:

-             #        api_version: v1

-             #        kind: Secret

-             #        namespace: "{{ namespace }}"

-             #        name: "kojid-sample-virt-default-ssh-key"

-             #      register: kojibuilder_ssh_secrets

-             #    - assert:

-             #        that:

-             #          - kojibuilder_ssh_secrets.resources|length == 1

-             #          - kojibuilder_ssh_secrets.resources[0].metadata.labels['app'] == 'koji-builder'

-             #          - kojibuilder_ssh_secrets.resources[0].metadata.labels['ctx'] == 'ssh-key'

-             #          - kojibuilder_ssh_secrets.resources[0].metadata.labels['kojid'] == 'sample-virt'

-             #          - "'id_rsa' in kojibuilder_ssh_secrets.resources[0].data"

-             #          - "'id_rsa.pub' in kojibuilder_ssh_secrets.resources[0].data"

-             #- block:

-             #    - name: 'TEST: kojibuilder.secret.ssh-pub-keys'

-             #      k8s_info:

-             #        api_version: v1

-             #        kind: Secret

-             #        namespace: "{{ namespace }}"

-             #        name: kojid-sample-virt-ssh-pub-keys

-             #      register: kojibuilder_ssh_pub_secrets

-             #    - assert:

-             #        that:

-             #          - kojibuilder_ssh_pub_secrets.resources|length == 1

-             #          - kojibuilder_ssh_pub_secrets.resources[0].metadata.labels['app'] == 'koji-builder'

-             #          - kojibuilder_ssh_pub_secrets.resources[0].metadata.labels['ctx'] == 'ssh-key-pub'

-             #          - kojibuilder_ssh_pub_secrets.resources[0].metadata.labels['kojid'] == 'sample-virt'

-             #          - "'id_rsa' not in kojibuilder_ssh_pub_secrets.resources[0].data"

-             #          - "'id_rsa.pub' not in kojibuilder_ssh_pub_secrets.resources[0].data"

-             #          - "'key1' in kojibuilder_ssh_pub_secrets.resources[0].data"

- - block:

-     - name: 'TEST: kojibuilder.deletion'

-       k8s:

-         state: absent

-         api_version: buildsys.apps.fedoraproject.org/v1alpha1

-         kind: KojiBuilder

-         namespace: "{{ namespace }}"

-         name: sample-virt

-         wait: true

-         wait_timeout: 300

@@ -1,70 +0,0 @@ 

- ---

- - name: Create the buildsys.apps.fedoraproject.org/v1alpha1.KojiUser

-   k8s:

-     state: present

-     namespace: '{{ namespace }}'

-     definition:      

-       apiVersion: buildsys.apps.fedoraproject.org/v1alpha1

-       kind: KojiUser

-       metadata:

-         name: sample

-         annotations:

-           buildsys.apps.fedoraproject.org/hub: sample/osdk-test

-       spec:

-         permissions: []

-         ssl: true

-     wait: yes

-     wait_timeout: 300

-     wait_condition:

-       type: Running

-       reason: Successful

-       status: "True"

-   vars:

-     cr_file: 'buildsys_v1alpha1_kojiuser.yaml'

- 

- - block:

-     - name: 'TEST: kojiuser.secret.client-cert'

-       k8s_info:

-         api_version: v1

-         kind: Secret

-         namespace: "{{ namespace }}"

-         name: sample-koji-client-cert

-       register: kojiuser_client_secrets

-     - assert:

-         that:

-           - kojiuser_client_secrets.resources | length == 1

-           - kojiuser_client_secrets.resources[0].metadata.labels['app'] == 'koji'

-           - kojiuser_client_secrets.resources[0].metadata.labels['koji-hub'] == 'sample'

-           - kojiuser_client_secrets.resources[0].metadata.annotations['buildsys.apps.fedoraproject.org/hub'] == 'sample/osdk-test'

-           - "'client.pem' in kojiuser_client_secrets.resources[0].data"

- 

- - block:

-     - name: 'TEST: kojiuser.created.database'

-       command: "kubectl get po --selector='app=postgres' -o jsonpath='{.items[0].metadata.name}'  -n {{ namespace }}"

-       register: k8s_pod

-     - command: "kubectl exec -it {{ k8s_pod.stdout  }} -n {{ namespace }} -- psql --username koji koji -c 'SELECT name FROM users;'"

-       register: psql_users

-     - assert:

-         that:

-           - "'sample' in psql_users.stdout"

- 

- 

- - name: Delete KojiUser resource

-   k8s:

-     api_version: buildsys.apps.fedoraproject.org/v1alpha1

-     kind: KojiUser

-     name: sample

-     namespace: "{{ namespace }}"

-     state: absent

-     wait: true

- 

- - block:

-     - name: 'TEST: kojiuser.deleted.database'

-       command: "kubectl get po --selector='app=postgres' -o jsonpath='{.items[0].metadata.name}'  -n {{ namespace }}"

-       register: k8s_pod

-     - command: "kubectl exec -it {{ k8s_pod.stdout  }} -n {{ namespace }} -- psql --username koji koji -c 'SELECT name,status FROM users;'"

-       register: psql_users

-     - assert:

-         that:

-           - "'sample' in psql_users.stdout"

-           - "'1' in psql_users.stdout"

@@ -2,60 +2,102 @@ 

  - name: Verify

    hosts: localhost

    connection: local

-   gather_facts: no

-   collections:

-     - community.kubernetes

- 

-   vars:

-     ctrl_label: control-plane=controller-manager

- 

+   gather_facts: false

    tasks:

+     - name: Set global vars

+       set_fact:

+         k8s_crs: []

+ 

      - block:

-         - name: Import all test files from tasks/

-           include_tasks: 'tasks/{{ item }}_test.yml'

-           with_items:

-             - kojihub

-             - kojibuilder

-             - kojira

-             - kojiuser

+         - block:

+             - name: Koji-Hub Tests

+               include_tasks: "{{ components_dir }}/koji-hub/create.yml"

+             - include_tasks: "{{ components_dir }}/koji-hub/verify.yml"

+           when: verify_kojihub | bool | default(true)

+ 

+         - block:

+             - name: Kojira Tests

+               include_tasks: "{{ components_dir }}/kojira/create.yml"

+             - include_tasks: "{{ components_dir }}/kojira/verify.yml"

+           when: verify_kojira | bool | default(true)

+         

+         - block:

+             - name: Koji-Builder (container) Tests

+               include_tasks: "{{ components_dir }}/koji-builder/container/create.yml"

+             - include_tasks: "{{ components_dir }}/koji-builder/container/verify.yml"

+           when: verify_kojibuilder_container | bool | default(true)

          

-         - name: Run kubevirt based builder

-           include_tasks: tasks/kojibuilder_kubevirt_test.yml

-           when: "minikube_driver == 'kvm2'"

+         - block:

+             - name: Koji-Builder (Kubevirt) Tests

+               include_tasks: "{{ components_dir }}/koji-builder/kubevirt/create.yml"

+             - include_tasks: "{{ components_dir }}/koji-builder/kubevirt/verify.yml"

+           when:

+             - verify_kojibuilder_kubevirt | bool | default(true)

+             - backend_cluster == 'minikube'

+             - minikube_driver == 'kvm2'

+ 

        rescue:

-         - name: Retrieve relevant resources

-           k8s_info:

-             api_version: '{{ item.api_version }}'

-             kind: '{{ item.kind }}'

-             namespace: '{{ namespace }}'

-           loop:

-             - api_version: v1

-               kind: Pod

-             - api_version: apps/v1

-               kind: Deployment

-             - api_version: v1

-               kind: Secret

-             - api_version: v1

-               kind: ConfigMap

-           register: debug_resources

- 

-         - name: Retrieve Pod logs

-           shell: "kubectl logs {{ item.metadata.name }} -c manager -n {{ namespace }}"

-           loop: "{{ q('k8s', api_version='v1', kind='Pod', namespace=namespace, label_selector=ctrl_label) }}"

-           register: debug_logs

- 

-         - name: Output gathered resources

-           debug:

-             var: debug_resources

- 

-         - name: Output gathered logs

-           debug:

-             var: debug_logs

-           # loop: '{{ debug_logs.stdout_lines }}'

- 

-         - name: Re-emit failure

+         - block:

+             - name: Collect CRs to log

+               set_fact:

+                 k8s_crs: "{{ k8s_crs + [['kojihub', k8s_cr_kojihub.result]] }}"

+               when: verify_kojihub | bool | default(true)

+         

+             - set_fact:

+                 k8s_crs: "{{ k8s_crs + [['kojira', k8s_cr_kojira.result]] }}"

+               when: verify_kojira | bool | default(true)

+ 

+             - set_fact:

+                 k8s_crs: "{{ k8s_crs + [['kojibuilder_container', k8s_cr_kojibuilder_container.result]] }}"

+               when: verify_kojibuilder_container | bool | default(true)

+ 

+             - set_fact:

+                 k8s_crs: "{{ k8s_crs + [['kojibuilder_kubevirt', k8s_cr_kojibuilder_kubevirt.result]] }}"

+               when: verify_kojibuilder_kubevirt | bool | default(true)

+ 

+         - ansible.builtin.debug:

+             msg: "Operator Runtime Error"

+ 

+         - name: Operator Pod Log

+           ansible.builtin.include_tasks: _log.yml

+           vars:

+             log_container: manager

+             log_labels:

+               - "control-plane=controller-manager"

+             log_fname: operator.log

+ 

+         - name: Koji-Hub Pod Log

+           ansible.builtin.include_tasks: _log.yml

+           vars:

+             log_container: "koji-hub"

+             log_labels:

+               - "app=koji-hub"

+             log_fname: "koji-hub_pod.log"

+           when: verify_kojihub | bool | default(true)

+ 

+         - name: Kojira Pod Log

+           ansible.builtin.include_tasks: _log.yml

            vars:

-             failed_task:

-               result: '{{ ansible_failed_result }}'

-           fail:

-             msg: '{{ failed_task }}'

+             log_container: "kojira"

+             log_labels:

+               - "app=kojira"

+             log_fname: "kojira_pod.log"

+           when: verify_kojira | bool | default(true)

+ 

+         - name: Koji-Builder (Container) Pod Log

+           ansible.builtin.include_tasks: _log.yml

+           vars:

+             log_container: "koji-builder"

+             log_labels:

+               - "app=koji-builder"

+             log_fname: "kojibuilder_pod.log"

+           when: verify_kojibuilder_container | bool | default(true)

+         

+         - name: Export Custom Resources

+           copy:

+             content: "{{ item.1 | to_yaml }}"

+             dest: "{{ logs_dir }}/{{ item.0 }}_cr.yaml"

+           loop: "{{ k8s_crs }}"

+         

+         - ansible.builtin.fail:

+             msg: "Deployment error found, check logs in {{ logs_dir }}"

@@ -1,24 +0,0 @@ 

- ---

- - name: Converge

-   hosts: localhost

-   connection: local

-   gather_facts: no

- 

-   tasks:

-     - name: Build operator image

-       docker_image:

-         build:

-           path: '{{ project_dir }}'

-           pull: no

-         name: '{{ operator_image }}'

-         tag: latest

-         push: no

-         source: build

-         force_source: yes

- 

-     - name: Load image into kind cluster

-       command: kind load docker-image --name osdk-test '{{ operator_image }}'

-       register: result

-       changed_when: '"not yet present" in result.stdout'

- 

- - import_playbook: ../default/converge.yml

@@ -1,8 +0,0 @@ 

- ---

- - name: Create

-   hosts: localhost

-   connection: local

-   gather_facts: false

-   tasks:

-     - name: Create test kind cluster

-       command: kind create cluster --name osdk-test --kubeconfig {{ kubeconfig }}

@@ -1,16 +0,0 @@ 

- ---

- - name: Destroy

-   hosts: localhost

-   connection: local

-   gather_facts: false

-   collections:

-     - community.kubernetes

- 

-   tasks:

-     - name: Destroy test kind cluster

-       command: kind delete cluster --name osdk-test --kubeconfig {{ kubeconfig }}

- 

-     - name: Unset pull policy

-       command: '{{ kustomize }} edit remove patch pull_policy/{{ operator_pull_policy }}.yaml'

-       args:

-         chdir: '{{ config_dir }}/testing'

@@ -1,57 +0,0 @@ 

- ---

- dependency:

-   name: galaxy

-   options:

-     requirements-file: requirements.yml

- driver:

-   name: delegated

- lint: |

-   set -e

-   yamllint -d "{extends: relaxed, rules: {line-length: {max: 120}}}" .

- platforms:

-   - name: cluster

-     groups:

-       - k8s

- provisioner:

-   name: ansible

-   playbooks:

-     prepare: ../default/prepare.yml

-     verify: ../default/verify.yml

-   lint: |

-     set -e

-     ansible-lint

-   inventory:

-     group_vars:

-       all:

-         namespace: ${TEST_OPERATOR_NAMESPACE:-osdk-test}

-     host_vars:

-       localhost:

-         ansible_python_interpreter: '{{ ansible_playbook_python }}'

-         config_dir: ${MOLECULE_PROJECT_DIRECTORY}/config

-         samples_dir: ${MOLECULE_PROJECT_DIRECTORY}/config/samples

-         components_dir: ${MOLECULE_PROJECT_DIRECTORY}/../components

-         project_dir: ${MOLECULE_PROJECT_DIRECTORY}

-         operator_image: testing-operator

-         operator_pull_policy: "Never"

-         kubeconfig: "{{ lookup('env', 'KUBECONFIG') }}"

-         kustomize: ${KUSTOMIZE_PATH:-kustomize}

-   env:

-     K8S_AUTH_KUBECONFIG: ${MOLECULE_EPHEMERAL_DIRECTORY}/kubeconfig

-     KUBECONFIG: ${MOLECULE_EPHEMERAL_DIRECTORY}/kubeconfig

- scenario:

-   name: kind

-   test_sequence:

-     # - lint

-     - destroy

-     - dependency

-     - syntax

-     - create

-     - prepare

-     - converge

-     - verify

-     - destroy

- verifier:

-   name: ansible

-   lint: |

-     set -e

-     ansible-lint

@@ -1,6 +0,0 @@ 

- ---

- collections:

-   - name: community.kubernetes

-     version: "1.2.1"

-   - name: operator_sdk.util

-     version: "0.2.0"

@@ -1,22 +0,0 @@ 

- ---

- - name: Converge

-   hosts: localhost

-   connection: local

-   gather_facts: no

- 

-   tasks:

-     - name: Build operator image

-       containers.podman.podman_image:

-         build:

-           format: docker

-         path: '{{ project_dir }}'

-         name: '{{ operator_image }}'

-         tag: latest

-         push: no

- 

-     - name: Load image into minikube

-       command: minikube image load {{ operator_image }} --overwrite=true

- 

- 

- 

- - import_playbook: ../default/converge.yml

@@ -1,17 +0,0 @@ 

- ---

- - name: Destroy

-   hosts: localhost

-   connection: local

-   gather_facts: false

-   collections:

-     - community.kubernetes

- 

-   tasks:

-     - name: Destroy minikube

-       command: minikube delete

-       when: minikube_skip == 'N'

- 

-     - name: Unset pull policy

-       command: '{{ kustomize }} edit remove patch pull_policy/{{ operator_pull_policy }}.yaml'

-       args:

-         chdir: '{{ config_dir }}/testing'

@@ -1,22 +0,0 @@ 

- ---

- - name: Create

-   hosts: localhost

-   connection: local

-   gather_facts: false

-   tasks:

-     - name: Enable kubevirt

-       command: minikube addons enable kubevirt

-       when: "minikube_driver == 'kvm2'"

- 

-     - name: Wait for kubevirt readiness

-       k8s_info:

-         api_version: kubevirt.io/v1

-         kind: KubeVirt

-         namespace: kubevirt

-         name: kubevirt

-         wait: true

-         wait_condition:

-           type: Available

-           reason: AllComponentsReady

-           status: "True"

- 

@@ -1,6 +0,0 @@ 

- ---

- collections:

-   - name: community.kubernetes

-     version: "1.2.1"

-   - name: operator_sdk.util

-     version: "0.2.0"

@@ -1,6 +0,0 @@ 

- ---

- collections:

-   - name: community.kubernetes

-     version: "1.2.1"

-   - name: operator_sdk.util

-     version: "0.2.0"

@@ -1,21 +0,0 @@ 

- ---

- - name: Build Operator in Kubernetes docker container

-   hosts: k8s

-   gather_facts: false

-   vars:

-     image_name: "{{ operator_image }}"

-     dockerfile_path: /build/Dockerfile

-   tasks:

-     # using command so we don't need to install any dependencies

-     - name: Get existing image hash

-       command: docker images -q {{ image_name }}

-       register: prev_hash

-       changed_when: false

- 

-     - name: Build Operator Image

-       command: docker build -f {{ dockerfile_path }} -t {{ image_name }} /build

-       register: build_cmd

-       changed_when: not prev_hash.stdout or (prev_hash.stdout and prev_hash.stdout not in ''.join(build_cmd.stdout_lines[-2:]))

- 

- 

- - import_playbook: '{{ playbook_dir }}/../default/converge.yml'

@@ -1,43 +0,0 @@ 

- ---

- - name: Destroy

-   hosts: localhost

-   connection: local

-   gather_facts: false

-   no_log: "{{ molecule_no_log }}"

-   tasks:

-     - name: Destroy molecule instance(s)

-       docker_container:

-         name: "{{ item.name }}"

-         docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"

-         cacert_path: "{{ item.cacert_path | default((lookup('env', 'DOCKER_CERT_PATH') + '/ca.pem') if lookup('env', 'DOCKER_CERT_PATH') else omit) }}"

-         cert_path: "{{ item.cert_path | default((lookup('env', 'DOCKER_CERT_PATH') + '/cert.pem')  if lookup('env', 'DOCKER_CERT_PATH') else omit) }}"

-         key_path: "{{ item.key_path | default((lookup('env', 'DOCKER_CERT_PATH') + '/key.pem') if lookup('env', 'DOCKER_CERT_PATH') else omit) }}"

-         tls_verify: "{{ item.tls_verify | default(lookup('env', 'DOCKER_TLS_VERIFY')) or false }}"

-         state: absent

-         force_kill: "{{ item.force_kill | default(true) }}"

-         keep_volumes: "{{ item.keep_volumes | default(true) }}"

-         container_default_behavior: "{{ item.container_default_behavior | default('compatibility' if ansible_version.full is version_compare('2.10', '>=') else omit) }}"

-       register: server

-       with_items: "{{ molecule_yml.platforms }}"

-       async: 7200

-       poll: 0

- 

-     - name: Wait for instance(s) deletion to complete

-       async_status:

-         jid: "{{ item.ansible_job_id }}"

-       register: docker_jobs

-       until: docker_jobs.finished

-       retries: 300

-       with_items: "{{ server.results }}"

- 

-     - name: Prune everything

-       docker_prune:

-         containers: yes

-         images: yes

-         networks: yes

-         volumes: yes

- 

-     - name: Unset pull policy

-       command: '{{ kustomize }} edit remove patch --path pull_policy/{{ operator_pull_policy }}.yaml'

-       args:

-         chdir: '{{ config_dir }}/testing'

@@ -1,66 +0,0 @@ 

- ---

- dependency:

-   name: galaxy

- driver:

-   name: docker

- lint: |

-   yamllint roles/

- platforms:

-   - name: kind-test-local

-     groups:

-       - k8s

-     image: bsycorp/kind:latest-1.16

-     privileged: true

-     override_command: false

-     exposed_ports:

-       - 8443/tcp

-       - 10080/tcp

-     published_ports:

-       - 0.0.0.0:${TEST_CLUSTER_PORT:-10443}:8443/tcp

-     pre_build_image: true

-     volumes:

-       - ${MOLECULE_PROJECT_DIRECTORY}:/build:Z

- provisioner:

-   name: ansible

-   log: true

-   lint: |

-     ansible-lint .

-   inventory:

-     group_vars:

-       all:

-         namespace: ${TEST_NAMESPACE:-osdk-test}

-         operator_image: apps.fedoraproject.org/mbox-operator:testing

-     host_vars:

-       localhost:

-         ansible_python_interpreter: '{{ ansible_playbook_python }}'

-         config_dir: ${MOLECULE_PROJECT_DIRECTORY}/config

-         samples_dir: ${MOLECULE_PROJECT_DIRECTORY}/config/samples

-         components_dir: ${MOLECULE_PROJECT_DIRECTORY}/../components

-         operator_image: ${OPERATOR_IMAGE:-"apps.fedoraproject.org/mbox-operator:testing"}

-         operator_pull_policy: ${OPERATOR_PULL_POLICY:-"IfNotPresent"}

-         kustomize: ${KUSTOMIZE_PATH:-kustomize}

-         kubeconfig: "{{ lookup('env', 'KUBECONFIG') }}"

-   env:

-     K8S_AUTH_KUBECONFIG: /tmp/molecule/kind-test-local/kubeconfig

-     KUBECONFIG: /tmp/molecule/kind-test-local/kubeconfig

-     ANSIBLE_ROLES_PATH: ${MOLECULE_PROJECT_DIRECTORY}/roles

-     KIND_PORT: '${TEST_CLUSTER_PORT:-10443}'

-   playbooks:

-     destroy: destroy.yml

-     verify: ../default/verify.yml

- scenario:

-   name: test-local

-   test_sequence:

-     - lint

-     - destroy

-     - dependency

-     - syntax

-     - create

-     - prepare

-     - converge

-     - verify

-     - destroy

- verifier:

-   name: ansible

-   lint: |

-     flake8

@@ -1,37 +0,0 @@ 

- ---

- - name: Prepare

-   hosts: k8s

-   gather_facts: false

-   vars:

-     kubeconfig: "{{ lookup('env', 'KUBECONFIG') }}"

-   tasks:

-     - name: delete the kubeconfig if present

-       file:

-         path: '{{ kubeconfig }}'

-         state: absent

-       delegate_to: localhost

- 

-     - name: Fetch the kubeconfig

-       fetch:

-         dest: '{{ kubeconfig }}'

-         flat: true

-         src: /root/.kube/config

- 

-     - name: Change the kubeconfig port to the proper value

-       replace:

-         regexp: 'server: http(s?):\/\/([0-9\.]+|localhost):[0-9]+'

-         replace: "server: https://localhost:{{ lookup('env', 'KIND_PORT') }}"

-         path: '{{ kubeconfig }}'

-       delegate_to: localhost

- 

-     - name: Wait for the Kubernetes API to become available (this could take a minute)

-       uri:

-         url: "https://localhost:8443/readyz"

-         status_code: 200

-         validate_certs: false

-       register: result

-       until: (result.status|default(-1)) == 200

-       retries: 60

-       delay: 5

- 

- - import_playbook: '{{ playbook_dir }}/../default/prepare.yml'

refactoring tests to use a single scenario + env vars.

Pull-Request has been merged by lrossett

2 years ago
Metadata
Changes Summary 54
+3 -0
file changed
operator/.gitignore
+3
file added
operator/molecule/_backends/cluster/minikube/converge.yml
+9
file added
operator/molecule/_backends/cluster/minikube/create.yml
+8
file added
operator/molecule/_backends/cluster/minikube/destroy.yml
+0 -0
file renamed
operator/molecule/minikube/molecule.yml
operator/molecule/_backends/cluster/minikube/molecule.yml
+29 -41
file renamed
operator/molecule/minikube/create.yml
operator/molecule/_backends/cluster/minikube/prepare.yml
+0 -0
file renamed
operator/molecule/cluster/requirements.yml
operator/molecule/_backends/cluster/minikube/requirements.yml
+13
file added
operator/molecule/_backends/container/minikube/build.yml
+3
file added
operator/molecule/_backends/container/minikube/preflight.yml
+3
file added
operator/molecule/_backends/container/minikube/remove.yml
+12
file added
operator/molecule/_backends/container/podman/build.yml
+13
file added
operator/molecule/_backends/container/podman/preflight.yml
+10
file added
operator/molecule/_backends/container/podman/remove.yml
+30
file added
operator/molecule/_components/koji-builder/container/create.yml
+0 -32
file renamed
operator/molecule/default/tasks/kojibuilder_test.yml
operator/molecule/_components/koji-builder/container/verify.yml
+29
file added
operator/molecule/_components/koji-builder/kubevirt/create.yml
+27
file added
operator/molecule/_components/koji-builder/kubevirt/verify.yml
+13
file added
operator/molecule/_components/koji-hub/create.yml
+0 -14
file renamed
operator/molecule/default/tasks/kojihub_test.yml
operator/molecule/_components/koji-hub/verify.yml
+25
file added
operator/molecule/_components/kojira/create.yml
+0 -25
file renamed
operator/molecule/default/tasks/kojira_test.yml
operator/molecule/_components/kojira/verify.yml
+0
file added
operator/molecule/_logs/.keepme
-24
file removed
operator/molecule/cluster/converge.yml
-14
file removed
operator/molecule/cluster/create.yml
-21
file removed
operator/molecule/cluster/destroy.yml
-54
file removed
operator/molecule/cluster/molecule.yml
-22
file removed
operator/molecule/cluster/prepare.yml
+15
file added
operator/molecule/default/INSTALL.rst
+16
file added
operator/molecule/default/_kustomize.yml
+24
file added
operator/molecule/default/_log.yml
+19
file added
operator/molecule/default/cleanup.yml
+44 -14
file changed
operator/molecule/default/converge.yml
+12 -1
file changed
operator/molecule/default/create.yml
+1 -18
file changed
operator/molecule/default/destroy.yml
-21
file removed
operator/molecule/default/kustomize.yml
+25 -15
file changed
operator/molecule/default/molecule.yml
+9 -25
file changed
operator/molecule/default/prepare.yml
-100
file removed
operator/molecule/default/tasks/kojibuilder_kubevirt_test.yml
-70
file removed
operator/molecule/default/tasks/kojiuser_test.yml
+94 -52
file changed
operator/molecule/default/verify.yml
-24
file removed
operator/molecule/kind/converge.yml
-8
file removed
operator/molecule/kind/create.yml
-16
file removed
operator/molecule/kind/destroy.yml
-57
file removed
operator/molecule/kind/molecule.yml
-6
file removed
operator/molecule/kind/requirements.yml
-22
file removed
operator/molecule/minikube/converge.yml
-17
file removed
operator/molecule/minikube/destroy.yml
-22
file removed
operator/molecule/minikube/prepare.yml
-6
file removed
operator/molecule/minikube/requirements.yml
-6
file removed
operator/molecule/requirements.yml
-21
file removed
operator/molecule/test-local/converge.yml
-43
file removed
operator/molecule/test-local/destroy.yml
-66
file removed
operator/molecule/test-local/molecule.yml
-37
file removed
operator/molecule/test-local/prepare.yml