Skip to content

Commit

Permalink
Create basic Reconcile methods for WatcherAPI
Browse files Browse the repository at this point in the history
This patch is basic recond methods to the watcherapi
controller, as well as some initial input validation.

The change adds the required CR spec and status, and creates the initial
structure for initialization and deletion. In addition it some some
input validation by accessing the osp secret and the database that
should be created by the watcher controller.

Finally, it is also adding some initial structure test for functional envtest
testing in WatcherAPI.

Related: OSPRH-11483
  • Loading branch information
cescgina authored and openshift-merge-bot[bot] committed Dec 11, 2024
1 parent 411338f commit 573ece5
Show file tree
Hide file tree
Showing 13 changed files with 757 additions and 35 deletions.
81 changes: 78 additions & 3 deletions api/bases/watcher.openstack.org_watcherapis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,88 @@ spec:
spec:
description: WatcherAPISpec defines the desired state of WatcherAPI
properties:
foo:
description: Foo is an example field of WatcherAPI. Edit watcherapi_types.go
to remove/update
databaseAccount:
default: watcher
description: DatabaseAccount - MariaDBAccount CR name used for watcher
DB, defaults to watcher
type: string
databaseInstance:
description: |-
MariaDB instance name
Required to use the mariadb-operator instance to create the DB and user
type: string
passwordSelectors:
default:
service: WatcherPassword
description: PasswordSelectors - Selectors to identify the ServiceUser
password from the Secret
properties:
service:
default: WatcherPassword
description: Service - Selector to get the watcher service user
password from the Secret
type: string
type: object
secret:
default: osp-secret
description: Secret containing all passwords / keys needed
type: string
required:
- databaseInstance
type: object
status:
description: WatcherAPIStatus defines the observed state of WatcherAPI
properties:
conditions:
description: Conditions
items:
description: Condition defines an observation of a API resource
operational state.
properties:
lastTransitionTime:
description: |-
Last time the condition transitioned from one status to another.
This should be when the underlying condition changed. If that is not known, then using the time when
the API field changed is acceptable.
format: date-time
type: string
message:
description: A human readable message indicating details about
the transition.
type: string
reason:
description: The reason for the condition's last transition
in CamelCase.
type: string
severity:
description: |-
Severity provides a classification of Reason code, so the current situation is immediately
understandable and could act accordingly.
It is meant for situations where Status=False and it should be indicated if it is just
informational, warning (next reconciliation might fix it) or an error (e.g. DB create issue
and no actions to automatically resolve the issue can/should be done).
For conditions where Status=Unknown or Status=True the Severity should be SeverityNone.
type: string
status:
description: Status of the condition, one of True, False, Unknown.
type: string
type:
description: Type of condition in CamelCase.
type: string
required:
- lastTransitionTime
- status
- type
type: object
type: array
observedGeneration:
description: |-
ObservedGeneration - the most recent generation observed for this
service. If the observed generation is less than the spec generation,
then the controller has not processed the latest changes injected by
the openstack-operator in the top-level CR (e.g. the ContainerImage)
format: int64
type: integer
type: object
type: object
served: true
Expand Down
14 changes: 9 additions & 5 deletions api/v1beta1/common_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,8 @@ limitations under the License.

package v1beta1

// WatcherTemplate defines a spec based reusable for all the CRDs
type WatcherTemplate struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file

// WatcherCommon defines a spec based reusable for all the CRDs
type WatcherCommon struct {
// +kubebuilder:validation:Optional
// +kubebuilder:default=osp-secret
// Secret containing all passwords / keys needed
Expand All @@ -42,6 +39,13 @@ type WatcherTemplate struct {
DatabaseAccount string `json:"databaseAccount"`
}

// WatcherTemplate defines the fields used in the top level CR
type WatcherTemplate struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file
WatcherCommon `json:",inline"`
}

// PasswordSelector to identify the DB and AdminUser password from the Secret
type PasswordSelector struct {
// +kubebuilder:validation:Optional
Expand Down
17 changes: 10 additions & 7 deletions api/v1beta1/watcherapi_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,28 @@ limitations under the License.
package v1beta1

import (
"github.com/openstack-k8s-operators/lib-common/modules/common/condition"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.

// WatcherAPISpec defines the desired state of WatcherAPI
type WatcherAPISpec struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file

// Foo is an example field of WatcherAPI. Edit watcherapi_types.go to remove/update
Foo string `json:"foo,omitempty"`
WatcherCommon `json:",inline"`
}

// WatcherAPIStatus defines the observed state of WatcherAPI
type WatcherAPIStatus struct {
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
// Important: Run "make" to regenerate code after modifying this file
// Conditions
Conditions condition.Conditions `json:"conditions,omitempty" optional:"true"`

// ObservedGeneration - the most recent generation observed for this
// service. If the observed generation is less than the spec generation,
// then the controller has not processed the latest changes injected by
// the openstack-operator in the top-level CR (e.g. the ContainerImage)
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
}

//+kubebuilder:object:root=true
Expand Down
28 changes: 26 additions & 2 deletions api/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

81 changes: 78 additions & 3 deletions config/crd/bases/watcher.openstack.org_watcherapis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,88 @@ spec:
spec:
description: WatcherAPISpec defines the desired state of WatcherAPI
properties:
foo:
description: Foo is an example field of WatcherAPI. Edit watcherapi_types.go
to remove/update
databaseAccount:
default: watcher
description: DatabaseAccount - MariaDBAccount CR name used for watcher
DB, defaults to watcher
type: string
databaseInstance:
description: |-
MariaDB instance name
Required to use the mariadb-operator instance to create the DB and user
type: string
passwordSelectors:
default:
service: WatcherPassword
description: PasswordSelectors - Selectors to identify the ServiceUser
password from the Secret
properties:
service:
default: WatcherPassword
description: Service - Selector to get the watcher service user
password from the Secret
type: string
type: object
secret:
default: osp-secret
description: Secret containing all passwords / keys needed
type: string
required:
- databaseInstance
type: object
status:
description: WatcherAPIStatus defines the observed state of WatcherAPI
properties:
conditions:
description: Conditions
items:
description: Condition defines an observation of a API resource
operational state.
properties:
lastTransitionTime:
description: |-
Last time the condition transitioned from one status to another.
This should be when the underlying condition changed. If that is not known, then using the time when
the API field changed is acceptable.
format: date-time
type: string
message:
description: A human readable message indicating details about
the transition.
type: string
reason:
description: The reason for the condition's last transition
in CamelCase.
type: string
severity:
description: |-
Severity provides a classification of Reason code, so the current situation is immediately
understandable and could act accordingly.
It is meant for situations where Status=False and it should be indicated if it is just
informational, warning (next reconciliation might fix it) or an error (e.g. DB create issue
and no actions to automatically resolve the issue can/should be done).
For conditions where Status=Unknown or Status=True the Severity should be SeverityNone.
type: string
status:
description: Status of the condition, one of True, False, Unknown.
type: string
type:
description: Type of condition in CamelCase.
type: string
required:
- lastTransitionTime
- status
- type
type: object
type: array
observedGeneration:
description: |-
ObservedGeneration - the most recent generation observed for this
service. If the observed generation is less than the spec generation,
then the controller has not processed the latest changes injected by
the openstack-operator in the top-level CR (e.g. the ContainerImage)
format: int64
type: integer
type: object
type: object
served: true
Expand Down
2 changes: 1 addition & 1 deletion config/samples/watcher_v1beta1_watcherapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ metadata:
app.kubernetes.io/managed-by: kustomize
name: watcherapi-sample
spec:
# TODO(user): Add fields here
databaseInstance: "openstack"
Loading

0 comments on commit 573ece5

Please sign in to comment.