Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,11 @@ bindata: kustomize yq ## Call sync bindata script
mkdir -p bindata/crds bindata/rbac bindata/operator
$(KUSTOMIZE) build config/crd > bindata/crds/crds.yaml
$(KUSTOMIZE) build config/default > bindata/operator/operator.yaml
sed -i bindata/operator/operator.yaml -e "/envCustomImage/c\\{{ range \$$envName, \$$envValue := .OpenStackServiceRelatedImages }}\n - name: {{ \$$envName }}\n value: {{ \$$envValue }}\n{{ end }}"
sed -i bindata/operator/operator.yaml -e "s|kube-rbac-proxy:replace_me.*|'{{ .KubeRbacProxyImage }}'|"
sed -i bindata/operator/operator.yaml -e "s|replicas:.*|replicas: {{ .OpenStackOperator.Deployment.Replicas }}|"
sed -i bindata/operator/operator.yaml -e "/envCustom/c\\{{- range .OpenStackOperator.Deployment.Manager.Env }}\n - name: '{{ .Name }}'\n value: '{{ .Value }}'\n{{- end }}"
sed -i bindata/operator/operator.yaml -e "/customLimits/c\\ cpu: {{ .OpenStackOperator.Deployment.Manager.Resources.Limits.CPU }}\n memory: {{ .OpenStackOperator.Deployment.Manager.Resources.Limits.Memory }}"
sed -i bindata/operator/operator.yaml -e "/customRequests/c\\ cpu: {{ .OpenStackOperator.Deployment.Manager.Resources.Requests.CPU }}\n memory: {{ .OpenStackOperator.Deployment.Manager.Resources.Requests.Memory }}"
sed -i bindata/operator/operator.yaml -e "s|kube-rbac-proxy:replace_me.*|'{{ .OpenStackOperator.Deployment.KubeRbacProxy.Image }}'|"
cp config/operator/managers.yaml bindata/operator/
cp config/operator/rabbit.yaml bindata/operator/
$(KUSTOMIZE) build config/rbac > bindata/rbac/rbac.yaml
Expand Down Expand Up @@ -200,7 +203,7 @@ ginkgo-run: ## Run ginkgo.
source hack/export_related_images.sh && \
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) -v debug --bin-dir $(LOCALBIN) use $(ENVTEST_K8S_VERSION) -p path)" \
OPERATOR_TEMPLATES="$(PWD)/templates" \
$(GINKGO) --trace --cover --coverpkg=./pkg/openstack,./pkg/openstackclient,./pkg/util,./pkg/dataplane/...,./controllers/...,./apis/client/v1beta1,./apis/core/v1beta1,./apis/dataplane/v1beta1 --coverprofile cover.out --covermode=atomic ${PROC_CMD} $(GINKGO_ARGS) $(GINKGO_TESTS)
$(GINKGO) --trace --cover --coverpkg=./pkg/operator,./pkg/openstack,./pkg/openstackclient,./pkg/util,./pkg/dataplane/...,./controllers/...,./apis/client/v1beta1,./apis/core/v1beta1,./apis/dataplane/v1beta1 --coverprofile cover.out --covermode=atomic ${PROC_CMD} $(GINKGO_ARGS) $(GINKGO_TESTS)

.PHONY: test-all
test-all: test golint golangci golangci-lint ## Run all tests.
Expand Down
82 changes: 82 additions & 0 deletions apis/bases/operator.openstack.org_openstacks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,82 @@ spec:
metadata:
type: object
spec:
properties:
operatorOverrides:
items:
properties:
controllerManager:
properties:
resources:
properties:
claims:
items:
properties:
name:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
type: object
requests:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
type: object
type: object
type: object
name:
enum:
- openstack
- barbican
- cinder
- designate
- glance
- heat
- horizon
- infra
- ironic
- keystone
- manila
- mariadb
- neutron
- nova
- octavia
- openstack-baremetal
- ovn
- placement
- rabbitmq-cluster
- swift
- telemetry
- test
minLength: 1
type: string
replicas:
format: int32
maximum: 1
minimum: 0
type: integer
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
type: object
status:
properties:
Expand Down Expand Up @@ -62,9 +138,15 @@ spec:
type: string
deployedOperatorCount:
type: integer
disabledOperatorCount:
type: integer
enabledOperatorCount:
type: integer
observedGeneration:
format: int64
type: integer
totalOperatorCount:
type: integer
type: object
type: object
served: true
Expand Down
196 changes: 196 additions & 0 deletions apis/operator/v1beta1/openstack_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,198 @@ package v1beta1

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

const (
OpenStackOperatorName = "openstack"
BarbicanOperatorName = "barbican"
CinderOperatorName = "cinder"
DesignateOperatorName = "designate"
GlanceOperatorName = "glance"
HeatOperatorName = "heat"
HorizonOperatorName = "horizon"
InfraOperatorName = "infra"
IronicOperatorName = "ironic"
KeystoneOperatorName = "keystone"
ManilaOperatorName = "manila"
MariaDBOperatorName = "mariadb"
NeutronOperatorName = "neutron"
NovaOperatorName = "nova"
OctaviaOperatorName = "octavia"
OpenStackBaremetalOperatorName = "openstack-baremetal"
OvnOperatorName = "ovn"
PlacementOperatorName = "placement"
RabbitMQOperatorName = "rabbitmq-cluster"
SwiftOperatorName = "swift"
TelemetryOperatorName = "telemetry"
TestOperatorName = "test"
// ReplicasEnabled - default replicas count when enabled
ReplicasEnabled int32 = 1
// ReplicasDisabled - replicas when disabled
ReplicasDisabled int32 = 0
)

var (
// DefaultManagerCPULimit - Default controller manager container CPU limit
DefaultManagerCPULimit resource.Quantity = resource.MustParse("500m")
// DefaultManagerCPURequests - Default controller manager container CPU requests
DefaultManagerCPURequests resource.Quantity = resource.MustParse("10m")
// DefaultManagerMemoryLimit - Default controller manager container memory limit
DefaultManagerMemoryLimit resource.Quantity = resource.MustParse("256Mi")
// DefaultManagerMemoryRequests - Default controller manager container memory requests
DefaultManagerMemoryRequests resource.Quantity = resource.MustParse("128Mi")
// DefaultRbacProxyCPULimit - Default kube rbac proxy container CPU limit
DefaultRbacProxyCPULimit resource.Quantity = resource.MustParse("500m")
// DefaultRbacProxyCPURequests - Default kube rbac proxy container CPU requests
DefaultRbacProxyCPURequests resource.Quantity = resource.MustParse("5m")
// DefaultRbacProxyMemoryLimit - Default kube rbac proxy container memory limit
DefaultRbacProxyMemoryLimit resource.Quantity = resource.MustParse("128Mi")
// DefaultRbacProxyMemoryRequests - Default kube rbac proxy container memory requests
DefaultRbacProxyMemoryRequests resource.Quantity = resource.MustParse("64Mi")
// OperatorList - list of all operators with optional different defaults then the above.
// NOTE: test-operator was deployed as a independant package so it may or may not be installed
// NOTE: depending on how watcher-operator is released for FR2 and then in FR3 it may need to be
// added into this list in the future
// IMPORTANT: have this list in sync with the Enum in OperatorSpec.Name parameter
OperatorList []OperatorSpec = []OperatorSpec{
{
Name: OpenStackOperatorName,
ControllerManager: ContainerSpec{
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceMemory: resource.MustParse("512Mi"),
},
Limits: corev1.ResourceList{
corev1.ResourceMemory: resource.MustParse("1Gi"),
},
},
},
},
{
Name: BarbicanOperatorName,
},
{
Name: CinderOperatorName,
},
{
Name: DesignateOperatorName,
},
{
Name: GlanceOperatorName,
},
{
Name: HeatOperatorName,
},
{
Name: HorizonOperatorName,
},
{
Name: InfraOperatorName,
ControllerManager: ContainerSpec{
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceMemory: resource.MustParse("512Mi"),
},
Limits: corev1.ResourceList{
corev1.ResourceMemory: resource.MustParse("1Gi"),
},
},
},
},
{
Name: IronicOperatorName,
},
{
Name: KeystoneOperatorName,
},
{
Name: ManilaOperatorName,
},
{
Name: MariaDBOperatorName,
},
{
Name: NeutronOperatorName,
},
{
Name: NovaOperatorName,
},
{
Name: OctaviaOperatorName,
},
{
Name: OpenStackBaremetalOperatorName,
},
{
Name: OvnOperatorName,
},
{
Name: PlacementOperatorName,
},
{
Name: RabbitMQOperatorName,
ControllerManager: ContainerSpec{
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("5m"),
corev1.ResourceMemory: resource.MustParse("64Mi"),
},
Limits: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("200m"),
corev1.ResourceMemory: resource.MustParse("500Mi"),
},
},
},
},
{
Name: SwiftOperatorName,
},
{
Name: TelemetryOperatorName,
},
{
Name: TestOperatorName,
},
}
)

// OpenStackSpec defines the desired state of OpenStack
type OpenStackSpec struct {
// +kubebuilder:validation:Optional
// +listType=map
// +listMapKey=name
// OperatorOverrides - list of OperatorSpec which allows to customize operator deployments
OperatorOverrides []OperatorSpec `json:"operatorOverrides"`
}

// OperatorSpec - customization for the operator deployment
type OperatorSpec struct {
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:Enum:=openstack;barbican;cinder;designate;glance;heat;horizon;infra;ironic;keystone;manila;mariadb;neutron;nova;octavia;openstack-baremetal;ovn;placement;rabbitmq-cluster;swift;telemetry;test
// Name of the service operators.
Name string `json:"name"`

// +kubebuilder:validation:Optional
// +kubebuilder:validation:Maximum=1
// +kubebuilder:validation:Minimum=0
// Replicas of the operator deployment
Replicas *int32 `json:"replicas,omitempty"`

// +kubebuilder:validation:Optional
// ControllerManager - tunings for the controller manager container
ControllerManager ContainerSpec `json:"controllerManager,omitempty"`
}

// ContainerSpec - customization for the container spec
type ContainerSpec struct {
// +kubebuilder:validation:Optional
// Resources - Compute Resources for the service operator controller manager
// https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
Resources corev1.ResourceRequirements `json:"resources,omitempty"`
}

// OpenStackStatus defines the observed state of OpenStack
Expand All @@ -35,6 +222,15 @@ type OpenStackStatus struct {
// DeployedOperatorCount - the number of operators deployed
DeployedOperatorCount *int `json:"deployedOperatorCount,omitempty"`

// DisabledOperatorCount - the number of operators which has replicas set to 0
DisabledOperatorCount *int `json:"disabledOperatorCount,omitempty"`

// EnabledOperatorCount - the number of operators which has replicas set to 1
EnabledOperatorCount *int `json:"enabledOperatorCount,omitempty"`

// TotalOperatorCount - the number all operators available
TotalOperatorCount *int `json:"totalOperatorCount,omitempty"`

// ObservedGeneration - the most recent generation observed for this object.
ObservedGeneration int64 `json:"observedGeneration,omitempty"` // no spec yet so maybe we don't need this

Expand Down
Loading