The operator can run locally on the developer's machine.
It will monitor the cluster specified in a file indicated by the $KUBECONFIG
environment variable:
make install # Install CRDs to the cluster
make run ENABLE_WEBHOOKS=false # Start the operator locallyWhen running locally, the validating webhooks responsible for verifying the SSP Custom Resource (CR) are deactivated, placing the responsibility on the developer to ensure the usage of the accurate SSP CR.
The Custom Resource Definitions (CRDs) can be removed using:
make uninstallAlternatively developers can also deploy kubevirtci based clusters before
building and deploying the operator.
For convenience the following Makefile
targets are provided that automate this flow either directly through the
kubevirtci project or indirectly using the main kubevirt project to
launch an environment.
Deploy latest released version of KubeVirt:
make cluster-up # Deploys the latest released version of KubeVirt
make cluster-sync # Builds and deploys the SSP operator from source
make cluster-down # Destroys the environmentDeploy KubeVirt from source:
make kubevirt-up # Deploys KubeVirt from source
make kubevirt-sync # Builds and deploys the SSP operator from source
make kubevirt-down # Destroys the environmentTo run unit tests, use this command:
make unittestTo run functional tests, use this command:
make functestThe following environment variables control how functional tests are run:
TEST_EXISTING_CR_NAMEandTEST_EXISTING_CR_NAMESPACE- Can be used to set an existing SSP CR to be used during the tests. The CR will be modified, deleted and recreated during testing.SKIP_UPDATE_SSP_TESTS- Skips tests that need to modify or delete the SSP CR. This is useful if the CR is owned by another operator.SKIP_CLEANUP_AFTER_TESTS- Do not remove created resources when the tests are finished.TIMEOUT_MINUTESandSHORT_TIMEOUT_MINUTES- Can be used to increase the timeouts used.
When the API definition in api is changed,
the generated code and CRDs need to be regenerated,
and API submodule has to be updated.
Use these commands:
make vendor
make generate
make manifestsTo dive into development for the ssp-operator project, an ideal resource to get started
is the Kubebuilder Book. With its foundation on Kubebuilder v3,
this book offers valuable insights and guidance for seamless development.
Controllers that can be found in controllers:
ServiceReconciler- Adds and reconciles a Service that should exist independently of the SSP CR for Prometheus monitoring to work with SSP.SspReconciler- Ensures that all required CRDs are available and reconciles the SSP CRD itself and its operands.- 'VmReconciler' - watches for VMs and creates a metric listing VMs with RBD volumes without krbd:rxbounce enabled.
The logic of ssp-operator is split into separate operands, which can be found
under internal/operands. Each operand deals with a designated task, all
operands are called during the reconciliation of SspReconciler.
Installs the bundled common templates found in data/common-templates-bundle.
A pull request (PR) for updating the bundle is automatically created when a new version
of the common-templates is released.
Manages automatic updates of boot sources for templates in cooperation with Containerized Data Importer (CDI). Data sources to deploy are defined in the SSP CR.
Installs prometheus monitoring rules for ssp-operator metrics. The available
metrics can be found in docs/metrics.md. The installed rules can be found in
internal/operands/metrics/resources.go.
Installs a ValidatingAdmissionPolicy
(VAP)
and ValidatingAdmissionPolicyBinding
which binds the VAP to all namespaces. The VAP prevents VirtualMachine (VM) objects
from being deleted when protection is enabled. To enable the delete protection, the label
kubevirt.io/vm-delete-protection: "True" has to be added to the VM object. The generated VAP resources can
be found in internal/operands/vm-delete-protection/resources.go.
The main template-validator runs in at least one separate container than the
ssp-operator. It is built with validator.Dockerfile.
This operand deploys the template-validator found in
internal/template-validator and installs an admission webhook, so the
template-validator can evaluate validations found in the
vm.kubevirt.io/validations annotation of VirtualMachine resources.
See the old template-validator repository
for more docs.
Installs the VM console proxy found in data/vm-console-proxy-bundle.
A pull request (PR) for updating the bundle is automatically created when a new version
of the vm-console-proxy is released.
A golangci-lint config and Makefile target are provided to keep the codebase aligned to certain best practices and styles.
The target installs golangci-lint if it is not already present. To run use the following command:
make lintThe target is also used when running unit tests locally.
A pre-commit config is provided to help developers catch any simple mistakes prior to committing their changes.
To install and use the tool please run the following commands:
pip install --user pre-commit
pre-commit install
git commit -s