## Problem In the ci-framework repo, we have multiple zuul jobs defined. Each of the zuul job have 3 stages to call the playbook during the deployment. It is pre-run, run and post-run. We have - multiple pre-run playbooks defined in ci/playbooks directory. - Multiple run playbook called - for EDPM/Baremetal jobs - run playbook calling deploy-edpm.yaml with multiple ansible vars defined in scenario/centos-9 directory - For content provider, kuttl and image build job - run playbook calling their own custom playbook with multiple ansible vars defined in scenario/centos-9 directory. CI Playbooks: https://github.com/openstack-k8s-operators/ci-framework/tree/main/ci/playbooks Scenario files: https://github.com/openstack-k8s-operators/ci-framework/tree/main/scenarios/centos-9 deploy-edpm.yml: https://github.com/openstack-k8s-operators/ci-framework/blob/main/deploy-edpm.yml With above architecture, we are seeing multiple problems - so many playbooks defined in ci/playbooks directory (what does what, so confusing) - var files stored in scenario/centos-9 directory (which are not actually scenarios) - Repeation in scenario files It does not give a clear picture of what scenarios we are testing and where are their setting defined. It makes harder to reproduce the job outside of CI. Related Jira: https://issues.redhat.com/browse/OSP-25854 ## Revisiting TripleO CI land In past, we have scenarios, featureset, release, nodesets and reusable playbooks. Let's reuse the same concept in ci-framework to solve the above problem. Too many words: - Scenarios: list of tht files defining how the services are getting installed - https://github.com/openstack/tripleo-heat-templates/tree/master/ci/environments - featureset: A file containing all the ansible vars performing a particular deployment - https://github.com/openstack/tripleo-quickstart/tree/master/config/general_config - release: A file containing all the ansible vars related to release - https://github.com/openstack/tripleo-quickstart/tree/master/config/release - nodeset: Used for ovb deployment (We might use it in future but let's see) - https://github.com/openstack/tripleo-quickstart/tree/master/config/nodes - playbooks: building blocking to drive the deployment - https://github.com/openstack/tripleo-quickstart/tree/master/playbooks - https://github.com/openstack/tripleo-quickstart-extras/tree/master/playbooks ## Let's say how we can use to solve the existing problem Before using the above concept, Let's take an example of typical deployment. Example Deployment: ``` As a developer, I want to deploy podified control plane with 3 galera replica and network isolation using antelope openstack service container on openshift 4.12. Once the deployment finishes, I want to make sure all the basic openstack api services are functioning. ``` From above example: - `podified control plane with 3 galera replica and network isolation` will be a scenario - A CR file will represent the following scenario - use Kustomize to customize the service - A set of playbooks to deploy the above scenario - `A list of ansible vars to achieve the deployment` - featureset/scenario vars - Since the above deployment is based on `antelope openstack service container on openshift 4.12` - release file - Since there is no mention of openshift cluster architecture let's assume it will be single node cluster - nodes The above things has one twist: We need to define our entrypoint just like quickstart.sh so that these things can be passed together and people can reproduce the same locally. ## Comments