Skip to content

Commit

Permalink
WIP ServiceTransport CR to connect to services
Browse files Browse the repository at this point in the history
New ServiceTransport custom resource similar to the TransportURL CR.
This exposes configuration snippets that are necessary to connect to
services like memcached or redis, based on how those services are
instantiated (e.g. TLS, authentication).

Jira: OSPRH-5283
  • Loading branch information
dciabrin committed Feb 27, 2024
1 parent 49edc0d commit e243c5f
Show file tree
Hide file tree
Showing 10 changed files with 798 additions and 0 deletions.
13 changes: 13 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,17 @@ resources:
defaulting: true
validation: true
webhookVersion: v1
- api:
crdVersion: v1
namespaced: true
controller: true
domain: openstack.org
group: network
kind: ServiceTransport
path: github.com/openstack-k8s-operators/infra-operator/apis/memcached/v1beta1
version: v1beta1
webhooks:
defaulting: true
validation: true
webhookVersion: v1
version: "3"
108 changes: 108 additions & 0 deletions apis/bases/memcached.openstack.org_servicetransports.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.11.1
creationTimestamp: null
name: servicetransports.memcached.openstack.org
spec:
group: memcached.openstack.org
names:
kind: ServiceTransport
listKind: ServiceTransportList
plural: servicetransports
singular: servicetransport
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Status
jsonPath: .status.conditions[0].status
name: Status
type: string
- description: Message
jsonPath: .status.conditions[0].message
name: Message
type: string
name: v1beta1
schema:
openAPIV3Schema:
description: ServiceTransport is the Schema for the servicetransports API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: ServiceTransportSpec defines the desired state of ServiceTransport
properties:
serviceName:
description: Name of the service targeted by the transport
type: string
required:
- serviceName
type: object
status:
description: ServiceTransportStatus defines the observed state of ServiceTransport
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
secretName:
description: SecretName - name of the secret containing the service
transport URL
type: string
type: object
type: object
served: true
storage: true
subresources:
status: {}
48 changes: 48 additions & 0 deletions apis/memcached/v1beta1/conditions.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1beta1

import (
condition "github.com/openstack-k8s-operators/lib-common/modules/common/condition"
)

// ServiceTransport Condition Types used by API objects.
const (
// ServiceTransportReadyCondition Status=True condition which indicates if ServiceTransport is configured and operational
ServiceTransportReadyCondition condition.Type = "ServiceTransportReady"
)

// ServiceTransport Reasons used by API objects.
const ()

// Common Messages used by API objects.
const (
//
// ServiceTransportReady condition messages
//

// ServiceTransportReadyErrorMessage
ServiceTransportReadyErrorMessage = "ServiceTransport error occured %s"

// ServiceTransportReadyInitMessage
ServiceTransportReadyInitMessage = "ServiceTransport not configured"

// ServiceTransportReadyMessage
ServiceTransportReadyMessage = "ServiceTransport completed"

// ServiceTransportInProgressMessage
ServiceTransportInProgressMessage = "ServiceTransport in progress"
)
71 changes: 71 additions & 0 deletions apis/memcached/v1beta1/servicetransport_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
Copyright 2022.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1beta1

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

// ServiceTransportSpec defines the desired state of ServiceTransport
type ServiceTransportSpec struct {
// +kubebuilder:validation:Required
// Name of the service targeted by the transport
ServiceName string `json:"serviceName"`
}

// ServiceTransportStatus defines the observed state of ServiceTransport
type ServiceTransportStatus struct {

// Conditions
Conditions condition.Conditions `json:"conditions,omitempty" optional:"true"`

// SecretName - name of the secret containing the service transport URL
SecretName string `json:"secretName,omitempty"`
}

//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
//+kubebuilder:printcolumn:name="Status",type="string",JSONPath=".status.conditions[0].status",description="Status"
//+kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[0].message",description="Message"

// ServiceTransport is the Schema for the servicetransports API
type ServiceTransport struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec ServiceTransportSpec `json:"spec,omitempty"`
Status ServiceTransportStatus `json:"status,omitempty"`
}

//+kubebuilder:object:root=true

// ServiceTransportList contains a list of ServiceTransport
type ServiceTransportList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ServiceTransport `json:"items"`
}

func init() {
SchemeBuilder.Register(&ServiceTransport{}, &ServiceTransportList{})
}

// IsReady - returns true if service is ready to serve requests
func (instance ServiceTransport) IsReady() bool {
return instance.Status.Conditions.IsTrue(ServiceTransportReadyCondition)
}
96 changes: 96 additions & 0 deletions apis/memcached/v1beta1/zz_generated.deepcopy.go

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

Loading

0 comments on commit e243c5f

Please sign in to comment.