Getting Started
You’ll need a Kubernetes cluster to run against. You can use
KIND to get a local cluster for testing, or run
against a remote cluster. Note: Your controller will automatically use the
current context in your kubeconfig file (i.e. whatever cluster kubectl
cluster-info
shows).
Running on the cluster
-
Install Instances of Custom Resources:
kubectl apply -f config/samples/
-
Build and push your image to the location specified by
IMG
:make docker-build docker-push IMG=<some-registry>/dataplane-operator:tag
-
Deploy the controller to the cluster with the image specified by
IMG
:make deploy IMG=<some-registry>/dataplane-operator:tag
Uninstall CRDs
To delete the CRDs from the cluster:
make uninstall
Undeploy controller
UnDeploy the controller to the cluster:
make undeploy
How it works
This project aims to follow the Kubernetes Operator pattern
It uses Controllers which provide a reconcile function responsible for synchronizing resources until the desired state is reached on the cluster
Test It Out
-
Install the CRDs into the cluster:
make install
-
Run your controller (this will run in the foreground, so switch to a new terminal if you want to leave it running):
make run
NOTE: You can also run this in one step by running: make install run
Modifying the API definitions
If you are editing the API definitions, generate the manifests such as CRs or CRDs using:
make manifests
NOTE: Run make --help
for more information on all potential make
targets
More information can be found via the Kubebuilder Documentation
Testing
The tests can be run with the following command:
make test
The test
target runs the
EnvTest tests with
Ginkgo. These tools will be installed by the
test
if needed.
EnvTest
tests are under the
tests/functional
directory in dataplane-operator.
Running kuttl tests
kuttl tests are under the tests/kuttl/tests in dataplane-operator and can be executed either directly from dataplane operator repository, or from install_yamls
Requirements
The kuttl tests require a running cluster with openstack-ansibleee-operator, openstack-baremetal-operator, infra-operator and rabbitmq-cluster-operator running in the cluster. The easiest way to ensure presence of these operators is to use install_yamls. However, it is possible to deploy them manually as well.
From install_yamls
First clone both the dataplane-operator and the install-yamls repos and make sure that they are in a state (commit) you want to test. For the purposes of this guide, we will assume following directory layout:
~ ├── dataplane-operator └── install_yamls
The kuttl tests are also run from the install_yamls repository by the CI jobs. |
We will also assume that there is no cluster already running. If you already have a cluster, skip the following step.
Initialize your CRC with install_yamls utilities. Make sure to have your pull secret ready and to fulfill all HW requirements. CRC can be initialized without install_yamls utilities. However, using existing scripts will simplify debugging and issue reporting.
Ensure presence of dataplane operator requirements and cleanup all remains of possible previous kuttl test run.
cd ..
make dataplane_kuttl_prep
make dataplane_cleanup
Moving to the dataplane-operator repo, we can start the dataplane operator itself.
Ports 8080 and 8081 are used for collection of metrics and health information. Make sure that they are not in use.
You can override them using |
This will start dataplane operator in your shell. Either redirect the output or have another ready for next step.
cd ../dataplane-operator
make run
If your patch introduces any changes to resources, such as OpenStackDataPlaneDeployment, you have to apply them manually.
Otherwise the test suite will run without them.
Changes to existing resources can be introduced with oc patch
, new resoruces require oc apply
.
oc apply -f ./path/to/my/file.yaml
Finally, you can launch kuttl tests themselves. You can also apply configurations from your tests manually.
make kuttl-test
From dataplane-operator
The kuttl tests can also be run directly from the dataplane-operator checkout but
you need the operators listed under Requirements
When running from a dataplane-operator checkout, kubectl-kuttl
must be
installed. The kubectl-kuttl
command can be installed from
kuttl releases, or using the
Makefile target kuttl
:
make kuttl
Then, run the operator from a checkout:
make run
Execute the kuttl tests:
make kuttl-test
Using KUTTL_ARGS
Kuttl tests can be supplied with any arguments compatible with the installed version of kuttl CLI, using the KUTTL_ARGS
var.
For example to run a single test:
make kuttl-test KUTTL_ARGS="--test dataplane-deploy-no-nodes"
Skip the test resource delete, which will leave the test resources created in the cluster, and can be useful for debugging failed tests:
make kuttl-test KUTTL_ARGS="--test dataplane-deploy-no-nodes --skip-delete"
Contributing to documentation
Rendering documentation locally
Install docs build requirements:
make docs-dependencies
To render the user-facing documentation site locally:
make docs
The built HTML files are in docs_build/dataplane
directory.
There are some additional make targets for convenience. The following targets, in addition to rendering the docs, will also open the resulting HTML in your browser so that you don’t have to look for it:
make docs-preview
The following targets set up an inotify watch on the documentation
sources, and when it detects modification, the HTML is re-rendered.
This is so that you can use "edit source - save source - refresh
browser page" loop when working on the docs, without having to run
make docs-*
repeatedly.
make docs-watch