diff --git a/api/bases/operator.openstack.org_openstacks.yaml b/api/bases/operator.openstack.org_openstacks.yaml index 3b72a29ac5..69e727b234 100644 --- a/api/bases/operator.openstack.org_openstacks.yaml +++ b/api/bases/operator.openstack.org_openstacks.yaml @@ -140,7 +140,6 @@ spec: - octavia - openstack-baremetal - ovn - - placement - swift - telemetry - test diff --git a/api/core/v1beta1/openstackcontrolplane_types.go b/api/core/v1beta1/openstackcontrolplane_types.go index 78862caf8b..cd25b131fe 100644 --- a/api/core/v1beta1/openstackcontrolplane_types.go +++ b/api/core/v1beta1/openstackcontrolplane_types.go @@ -44,7 +44,7 @@ import ( octaviav1 "github.com/openstack-k8s-operators/octavia-operator/api/v1beta1" "github.com/openstack-k8s-operators/openstack-operator/api/client/v1beta1" ovnv1 "github.com/openstack-k8s-operators/ovn-operator/api/v1beta1" - placementv1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1" + placementv1 "github.com/openstack-k8s-operators/nova-operator/api/placement/v1beta1" swiftv1 "github.com/openstack-k8s-operators/swift-operator/api/v1beta1" telemetryv1 "github.com/openstack-k8s-operators/telemetry-operator/api/v1beta1" watcherv1 "github.com/openstack-k8s-operators/watcher-operator/api/v1beta1" diff --git a/api/core/v1beta1/openstackcontrolplane_webhook.go b/api/core/v1beta1/openstackcontrolplane_webhook.go index bd46c8f7e9..43993f60c8 100644 --- a/api/core/v1beta1/openstackcontrolplane_webhook.go +++ b/api/core/v1beta1/openstackcontrolplane_webhook.go @@ -29,7 +29,7 @@ import ( "github.com/openstack-k8s-operators/lib-common/modules/common/route" common_webhook "github.com/openstack-k8s-operators/lib-common/modules/common/webhook" mariadbv1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1" - placementv1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1" + placementv1 "github.com/openstack-k8s-operators/nova-operator/api/placement/v1beta1" watcherv1 "github.com/openstack-k8s-operators/watcher-operator/api/v1beta1" "golang.org/x/exp/maps" apierrors "k8s.io/apimachinery/pkg/api/errors" diff --git a/api/core/v1beta1/zz_generated.deepcopy.go b/api/core/v1beta1/zz_generated.deepcopy.go index 3109972a84..94cd7761c6 100644 --- a/api/core/v1beta1/zz_generated.deepcopy.go +++ b/api/core/v1beta1/zz_generated.deepcopy.go @@ -41,9 +41,9 @@ import ( mariadb_operatorapiv1beta1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1" neutron_operatorapiv1beta1 "github.com/openstack-k8s-operators/neutron-operator/api/v1beta1" novav1beta1 "github.com/openstack-k8s-operators/nova-operator/api/nova/v1beta1" + placementv1beta1 "github.com/openstack-k8s-operators/nova-operator/api/placement/v1beta1" octavia_operatorapiv1beta1 "github.com/openstack-k8s-operators/octavia-operator/api/v1beta1" ovn_operatorapiv1beta1 "github.com/openstack-k8s-operators/ovn-operator/api/v1beta1" - placement_operatorapiv1beta1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1" swift_operatorapiv1beta1 "github.com/openstack-k8s-operators/swift-operator/api/v1beta1" telemetry_operatorapiv1beta1 "github.com/openstack-k8s-operators/telemetry-operator/api/v1beta1" watcher_operatorapiv1beta1 "github.com/openstack-k8s-operators/watcher-operator/api/v1beta1" @@ -1642,7 +1642,7 @@ func (in *PlacementSection) DeepCopyInto(out *PlacementSection) { *out = *in if in.Template != nil { in, out := &in.Template, &out.Template - *out = new(placement_operatorapiv1beta1.PlacementAPISpecCore) + *out = new(placementv1beta1.PlacementAPISpecCore) (*in).DeepCopyInto(*out) } in.APIOverride.DeepCopyInto(&out.APIOverride) diff --git a/api/go.mod b/api/go.mod index 85b76ae2e7..b56e05865a 100644 --- a/api/go.mod +++ b/api/go.mod @@ -25,7 +25,6 @@ require ( github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20260413082059-d107b5bac378 github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20260413094947-83f411fa655c github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20260420053123-cf0908d8cf39 - github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20260413090520-f18a11875c1d github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20260418085220-949c802081aa github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20260420053123-02a691a5b4d4 github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20260414124111-458e17672b3c @@ -136,3 +135,5 @@ replace k8s.io/code-generator => k8s.io/code-generator v0.31.14 //allow-merging replace k8s.io/component-base => k8s.io/component-base v0.31.14 //allow-merging replace github.com/cert-manager/cmctl/v2 => github.com/cert-manager/cmctl/v2 v2.1.2-0.20241127223932-88edb96860cf //allow-merging + +replace github.com/openstack-k8s-operators/nova-operator/api => github.com/amartyasinha/nova-operator/api v0.0.0-20260415060735-b54a701efcaf //allow-merging diff --git a/api/go.sum b/api/go.sum index 47e9a6861b..1c11c3499f 100644 --- a/api/go.sum +++ b/api/go.sum @@ -1,5 +1,7 @@ github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/amartyasinha/nova-operator/api v0.0.0-20260415060735-b54a701efcaf h1:amqohefOYtUs0mYie40WsZY+9YsMFTuAEmZecSfwR8Q= +github.com/amartyasinha/nova-operator/api v0.0.0-20260415060735-b54a701efcaf/go.mod h1:ZQpGqN3AszLv7OoySPuCFyrNkuOEi1lPTymhbd1gOrc= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cert-manager/cert-manager v1.16.5 h1:XIhKoS4zQV9RHXAkqQW0NLivvoxAnWzbPsy9BG6cPVc= @@ -144,16 +146,12 @@ github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20260413152655- github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20260413152655-564a51226a2a/go.mod h1:g/xgMnzNHxdTkqnEgAKwVOv75uPN4nuApbkGqSvASvs= github.com/openstack-k8s-operators/neutron-operator/api v0.6.1-0.20260420052839-b9314e4e03a3 h1:XyJrYBPiLCyUysII5RtHKjTekxrL3wxPEBlSvo0SKOQ= github.com/openstack-k8s-operators/neutron-operator/api v0.6.1-0.20260420052839-b9314e4e03a3/go.mod h1:5jWDZDariGwym2q926i/VtR16dgNAvY4mTM/UekciKw= -github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20260413153813-b59b2a226c10 h1:6DQAN11CMaStZezMumXgayPpJQVGfsWxn04xPsOsHaM= -github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20260413153813-b59b2a226c10/go.mod h1:ZQpGqN3AszLv7OoySPuCFyrNkuOEi1lPTymhbd1gOrc= github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20260413082059-d107b5bac378 h1:h72lnvPcecgJqOindL68zIZmcJY6xM0EjY5FYe5Z7Qw= github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20260413082059-d107b5bac378/go.mod h1:XO02J/MSp7f+HMyoT5xImUvTtDvDY4SgG2mi+nwdTMY= github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20260413094947-83f411fa655c h1:77hLym7nButLmaRm2aKozn0kW2WmrAaaYpx/HWHlUzc= github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20260413094947-83f411fa655c/go.mod h1:WKiIsGtY1q6VbpSa8QmOY3rYFpI061hwqYVFnAFfiFI= github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20260420053123-cf0908d8cf39 h1:PQ025L6DttCoxwHqLTpw0v0W9VEXrCqYLfGDnR04GyI= github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20260420053123-cf0908d8cf39/go.mod h1:ODYNTFMUlzvjlqXAh9AGXrzpBNQBAOkWiNQ6UldsqFw= -github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20260413090520-f18a11875c1d h1:ZvVIq5E/F82tqQckheo3WnL6XywTPc+PiJWyrllkyVo= -github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20260413090520-f18a11875c1d/go.mod h1:34ka8QoEZ2LFmJv6wO5l9U29f9Kd1vizVzbkzRQnwVA= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20260418085220-949c802081aa h1:pnzRdcdTy91mxcU93e7xp9gn+pNyWyOdB8w/WlRynvo= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20260418085220-949c802081aa/go.mod h1:REDdMRGrY7JhGOsrKXt4hNZJAq0f6b3ykVh/Wyy4UXs= github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20260420053123-02a691a5b4d4 h1:82WLFtF/6P1VwcVoyfO9vjEdMnkQFpHkVq4I3YY7L28= diff --git a/api/operator/v1beta1/openstack_types.go b/api/operator/v1beta1/openstack_types.go index 96b42bb517..5c10b0bb67 100644 --- a/api/operator/v1beta1/openstack_types.go +++ b/api/operator/v1beta1/openstack_types.go @@ -43,7 +43,6 @@ const ( OctaviaOperatorName = "octavia" OpenStackBaremetalOperatorName = "openstack-baremetal" OvnOperatorName = "ovn" - PlacementOperatorName = "placement" SwiftOperatorName = "swift" TelemetryOperatorName = "telemetry" TestOperatorName = "test" @@ -157,9 +156,6 @@ var ( { Name: OvnOperatorName, }, - { - Name: PlacementOperatorName, - }, { Name: SwiftOperatorName, }, @@ -188,7 +184,7 @@ type OpenStackSpec struct { 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;swift;telemetry;test;watcher + // +kubebuilder:validation:Enum:=openstack;barbican;cinder;designate;glance;heat;horizon;infra;ironic;keystone;manila;mariadb;neutron;nova;octavia;openstack-baremetal;ovn;swift;telemetry;test;watcher // Name of the service operators. Name string `json:"name"` diff --git a/bindata/rbac/nova-operator-rbac.yaml b/bindata/rbac/nova-operator-rbac.yaml index 3a607834a7..180e3dbbd4 100644 --- a/bindata/rbac/nova-operator-rbac.yaml +++ b/bindata/rbac/nova-operator-rbac.yaml @@ -69,6 +69,7 @@ rules: - apiGroups: - "" resources: + - configmaps - pods - secrets - services @@ -94,6 +95,7 @@ rules: - apiGroups: - apps resources: + - deployments - statefulsets verbs: - create @@ -231,6 +233,33 @@ rules: - get - patch - update +- apiGroups: + - placement.openstack.org + resources: + - placementapis + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - placement.openstack.org + resources: + - placementapis/finalizers + verbs: + - patch + - update +- apiGroups: + - placement.openstack.org + resources: + - placementapis/status + verbs: + - get + - patch + - update - apiGroups: - rabbitmq.openstack.org resources: diff --git a/bindata/rbac/placement-operator-rbac.yaml b/bindata/rbac/placement-operator-rbac.yaml deleted file mode 100644 index 91758f2b12..0000000000 --- a/bindata/rbac/placement-operator-rbac.yaml +++ /dev/null @@ -1,343 +0,0 @@ -# NOTE: this file is automatically generated by hack/sync-bindata.sh! -# ---- -apiVersion: cert-manager.io/v1 -kind: Issuer -metadata: - labels: - app.kubernetes.io/component: certificate - app.kubernetes.io/created-by: openstack-operator - app.kubernetes.io/instance: selfsigned-issuer - app.kubernetes.io/managed-by: kustomize - app.kubernetes.io/name: issuer - app.kubernetes.io/part-of: placement-operator - name: placement-operator-selfsigned-issuer - namespace: '{{ .OperatorNamespace }}' -spec: - selfSigned: {} ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: placement-operator-controller-manager - namespace: '{{ .OperatorNamespace }}' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: placement-operator-leader-election-role - namespace: '{{ .OperatorNamespace }}' -rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - creationTimestamp: null - name: placement-operator-manager-role -rules: -- apiGroups: - - "" - resources: - - configmaps - - pods - - secrets - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - serviceaccounts - verbs: - - create - - get - - list - - patch - - update - - watch -- apiGroups: - - apps - resources: - - deployments - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - batch - resources: - - jobs - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - k8s.cni.cncf.io - resources: - - network-attachment-definitions - verbs: - - get - - list - - watch -- apiGroups: - - keystone.openstack.org - resources: - - keystoneapis - verbs: - - get - - list - - watch -- apiGroups: - - keystone.openstack.org - resources: - - keystoneendpoints - - keystoneservices - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - mariadb.openstack.org - resources: - - mariadbaccounts - - mariadbdatabases - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - mariadb.openstack.org - resources: - - mariadbaccounts/finalizers - - mariadbdatabases/finalizers - verbs: - - patch - - update -- apiGroups: - - placement.openstack.org - resources: - - placementapis - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - placement.openstack.org - resources: - - placementapis/finalizers - verbs: - - patch - - update -- apiGroups: - - placement.openstack.org - resources: - - placementapis/status - verbs: - - get - - patch - - update -- apiGroups: - - rbac.authorization.k8s.io - resources: - - rolebindings - - roles - verbs: - - create - - get - - list - - patch - - update - - watch -- apiGroups: - - security.openshift.io - resourceNames: - - anyuid - resources: - - securitycontextconstraints - verbs: - - use -- apiGroups: - - topology.openstack.org - resources: - - topologies - verbs: - - get - - list - - update - - watch -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: placement-operator-leader-election-rolebinding - namespace: '{{ .OperatorNamespace }}' -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: placement-operator-leader-election-role -subjects: -- kind: ServiceAccount - name: placement-operator-controller-manager - namespace: '{{ .OperatorNamespace }}' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: placement-operator-manager-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: placement-operator-manager-role -subjects: -- kind: ServiceAccount - name: placement-operator-controller-manager - namespace: '{{ .OperatorNamespace }}' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: placement-operator-operator-metrics-auth-role -rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: placement-operator-operator-metrics-reader -rules: -- nonResourceURLs: - - /metrics - verbs: - - get ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: placement-operator-operator-metrics-auth-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: placement-operator-operator-metrics-auth-role -subjects: -- kind: ServiceAccount - name: placement-operator-operator-controller-manager - namespace: '{{ .OperatorNamespace }}' ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/name: placement-operator - control-plane: controller-manager - name: placement-operator-controller-manager-metrics-service - namespace: '{{ .OperatorNamespace }}' -spec: - ports: - - name: https - port: 8443 - protocol: TCP - targetPort: 8443 - selector: - app.kubernetes.io/name: placement-operator - control-plane: controller-manager ---- ---- -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - labels: - app.kubernetes.io/component: certificate - app.kubernetes.io/created-by: openstack-operator - app.kubernetes.io/instance: metrics-certs - app.kubernetes.io/managed-by: kustomize - app.kubernetes.io/name: placement-operator - name: placement-operator-metrics-certs - namespace: '{{ .OperatorNamespace }}' -spec: - dnsNames: - - placement-operator-metrics-service.{{ .OperatorNamespace }}.svc - - placement-operator-metrics-service.{{ .OperatorNamespace }}.svc.cluster.local - issuerRef: - kind: Issuer - name: placement-operator-selfsigned-issuer - secretName: placement-operator-metrics-server-cert diff --git a/cmd/main.go b/cmd/main.go index 149cfd098e..5ed076ee2d 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -76,10 +76,10 @@ import ( mariadbv1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1" neutronv1 "github.com/openstack-k8s-operators/neutron-operator/api/v1beta1" novav1 "github.com/openstack-k8s-operators/nova-operator/api/nova/v1beta1" + placementv1 "github.com/openstack-k8s-operators/nova-operator/api/placement/v1beta1" octaviav1 "github.com/openstack-k8s-operators/octavia-operator/api/v1beta1" baremetalv1 "github.com/openstack-k8s-operators/openstack-baremetal-operator/api/v1beta1" ovnv1 "github.com/openstack-k8s-operators/ovn-operator/api/v1beta1" - placementv1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1" swiftv1 "github.com/openstack-k8s-operators/swift-operator/api/v1beta1" telemetryv1 "github.com/openstack-k8s-operators/telemetry-operator/api/v1beta1" _ "github.com/openstack-k8s-operators/test-operator/api/v1beta1" diff --git a/config/crd/bases/operator.openstack.org_openstacks.yaml b/config/crd/bases/operator.openstack.org_openstacks.yaml index 3b72a29ac5..69e727b234 100644 --- a/config/crd/bases/operator.openstack.org_openstacks.yaml +++ b/config/crd/bases/operator.openstack.org_openstacks.yaml @@ -140,7 +140,6 @@ spec: - octavia - openstack-baremetal - ovn - - placement - swift - telemetry - test diff --git a/config/operator/manager_operator_images.yaml b/config/operator/manager_operator_images.yaml index d98666ab03..7b6c7b8248 100644 --- a/config/operator/manager_operator_images.yaml +++ b/config/operator/manager_operator_images.yaml @@ -38,15 +38,13 @@ spec: - name: RELATED_IMAGE_NEUTRON_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/neutron-operator@sha256:c256f93a5226c9aa0ad094ce8c9c9d1cd06ce05149b36e15863f96c965219e04 - name: RELATED_IMAGE_NOVA_OPERATOR_MANAGER_IMAGE_URL - value: quay.io/openstack-k8s-operators/nova-operator@sha256:6fbc3cddca9ccfd70a160f4e2d1e7a3199fd774fd483a3303228245c8fc0e859 + value: quay.io/amartyasinha/nova-operator@sha256:8a2ce3a0cdc3e9e2ec2e006c003685f328fcf65104b05705fad8acde4f509430 - name: RELATED_IMAGE_OCTAVIA_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/octavia-operator@sha256:3d89dcb18665d069912ab91c3d5ff5b7466b1def1ef03a9f7a833e3275742dee - name: RELATED_IMAGE_OPENSTACK_BAREMETAL_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/openstack-baremetal-operator@sha256:03e1133636014341091acf892ed749f92643dabe4bfbc40c6b23ffc323581f02 - name: RELATED_IMAGE_OVN_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/ovn-operator@sha256:9772d4018805275576f53367592d0cc1416bb4430594450a71d95ad936b8220b - - name: RELATED_IMAGE_PLACEMENT_OPERATOR_MANAGER_IMAGE_URL - value: quay.io/openstack-k8s-operators/placement-operator@sha256:ca04fe7352ca3d6eaed5842f84c0efaa160403649d5bd6281d9b4ff7b315b6ec - name: RELATED_IMAGE_SWIFT_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/swift-operator@sha256:2e9e2417f81f4ff9d270a79cb03d1febb2741cd935e34d846fb9e2751ffffb87 - name: RELATED_IMAGE_TELEMETRY_OPERATOR_MANAGER_IMAGE_URL diff --git a/go.mod b/go.mod index 1a8eea409c..4babf96b2e 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,6 @@ require ( github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20260413094947-83f411fa655c github.com/openstack-k8s-operators/openstack-operator/api v0.0.0-00010101000000-000000000000 github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20260420053123-cf0908d8cf39 - github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20260413090520-f18a11875c1d github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20260418085220-949c802081aa github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20260420053123-02a691a5b4d4 github.com/openstack-k8s-operators/test-operator/api v0.6.1-0.20260416110435-a3f78e737417 @@ -153,6 +152,8 @@ require ( replace github.com/openstack-k8s-operators/openstack-operator/api => ./api //allow-merging +replace github.com/openstack-k8s-operators/nova-operator/api => github.com/amartyasinha/nova-operator/api v0.0.0-20260415060735-b54a701efcaf //allow-merging + // mschuppert: map to latest commit from release-4.18 tag // must consistent within modules and service operators replace github.com/openshift/api => github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e //allow-merging diff --git a/go.sum b/go.sum index 1447b6c45e..3603ca8ca6 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/amartyasinha/nova-operator/api v0.0.0-20260415060735-b54a701efcaf h1:amqohefOYtUs0mYie40WsZY+9YsMFTuAEmZecSfwR8Q= +github.com/amartyasinha/nova-operator/api v0.0.0-20260415060735-b54a701efcaf/go.mod h1:ZQpGqN3AszLv7OoySPuCFyrNkuOEi1lPTymhbd1gOrc= github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= @@ -174,16 +176,12 @@ github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20260413152655- github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20260413152655-564a51226a2a/go.mod h1:g/xgMnzNHxdTkqnEgAKwVOv75uPN4nuApbkGqSvASvs= github.com/openstack-k8s-operators/neutron-operator/api v0.6.1-0.20260420052839-b9314e4e03a3 h1:XyJrYBPiLCyUysII5RtHKjTekxrL3wxPEBlSvo0SKOQ= github.com/openstack-k8s-operators/neutron-operator/api v0.6.1-0.20260420052839-b9314e4e03a3/go.mod h1:5jWDZDariGwym2q926i/VtR16dgNAvY4mTM/UekciKw= -github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20260413153813-b59b2a226c10 h1:6DQAN11CMaStZezMumXgayPpJQVGfsWxn04xPsOsHaM= -github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20260413153813-b59b2a226c10/go.mod h1:ZQpGqN3AszLv7OoySPuCFyrNkuOEi1lPTymhbd1gOrc= github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20260413082059-d107b5bac378 h1:h72lnvPcecgJqOindL68zIZmcJY6xM0EjY5FYe5Z7Qw= github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20260413082059-d107b5bac378/go.mod h1:XO02J/MSp7f+HMyoT5xImUvTtDvDY4SgG2mi+nwdTMY= github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20260413094947-83f411fa655c h1:77hLym7nButLmaRm2aKozn0kW2WmrAaaYpx/HWHlUzc= github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20260413094947-83f411fa655c/go.mod h1:WKiIsGtY1q6VbpSa8QmOY3rYFpI061hwqYVFnAFfiFI= github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20260420053123-cf0908d8cf39 h1:PQ025L6DttCoxwHqLTpw0v0W9VEXrCqYLfGDnR04GyI= github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20260420053123-cf0908d8cf39/go.mod h1:ODYNTFMUlzvjlqXAh9AGXrzpBNQBAOkWiNQ6UldsqFw= -github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20260413090520-f18a11875c1d h1:ZvVIq5E/F82tqQckheo3WnL6XywTPc+PiJWyrllkyVo= -github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20260413090520-f18a11875c1d/go.mod h1:34ka8QoEZ2LFmJv6wO5l9U29f9Kd1vizVzbkzRQnwVA= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20260418085220-949c802081aa h1:pnzRdcdTy91mxcU93e7xp9gn+pNyWyOdB8w/WlRynvo= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20260418085220-949c802081aa/go.mod h1:REDdMRGrY7JhGOsrKXt4hNZJAq0f6b3ykVh/Wyy4UXs= github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20260420053123-02a691a5b4d4 h1:82WLFtF/6P1VwcVoyfO9vjEdMnkQFpHkVq4I3YY7L28= diff --git a/hack/export_operator_related_images.sh b/hack/export_operator_related_images.sh index 31280479e6..63ff3412bd 100644 --- a/hack/export_operator_related_images.sh +++ b/hack/export_operator_related_images.sh @@ -12,11 +12,10 @@ export RELATED_IMAGE_KEYSTONE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-o export RELATED_IMAGE_MANILA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/manila-operator@sha256:4a1978fcd77a62c0ee127dfc3c75b5a5273b871aac52c60ad1a0cef46d004acf export RELATED_IMAGE_MARIADB_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/mariadb-operator@sha256:8fc0cdfb302b8e16ff7a990a8a6219877e52ae1a4555440255fd11da830c8fcc export RELATED_IMAGE_NEUTRON_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/neutron-operator@sha256:c256f93a5226c9aa0ad094ce8c9c9d1cd06ce05149b36e15863f96c965219e04 -export RELATED_IMAGE_NOVA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/nova-operator@sha256:6fbc3cddca9ccfd70a160f4e2d1e7a3199fd774fd483a3303228245c8fc0e859 +export RELATED_IMAGE_NOVA_OPERATOR_MANAGER_IMAGE_URL=quay.io/amartyasinha/nova-operator@sha256:8a2ce3a0cdc3e9e2ec2e006c003685f328fcf65104b05705fad8acde4f509430 export RELATED_IMAGE_OCTAVIA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/octavia-operator@sha256:3d89dcb18665d069912ab91c3d5ff5b7466b1def1ef03a9f7a833e3275742dee export RELATED_IMAGE_OPENSTACK_BAREMETAL_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/openstack-baremetal-operator@sha256:03e1133636014341091acf892ed749f92643dabe4bfbc40c6b23ffc323581f02 export RELATED_IMAGE_OVN_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/ovn-operator@sha256:9772d4018805275576f53367592d0cc1416bb4430594450a71d95ad936b8220b -export RELATED_IMAGE_PLACEMENT_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/placement-operator@sha256:ca04fe7352ca3d6eaed5842f84c0efaa160403649d5bd6281d9b4ff7b315b6ec export RELATED_IMAGE_SWIFT_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/swift-operator@sha256:2e9e2417f81f4ff9d270a79cb03d1febb2741cd935e34d846fb9e2751ffffb87 export RELATED_IMAGE_TELEMETRY_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/telemetry-operator@sha256:281bc644d91aa53e716bcf0252e71b1c6f87b4937c2d1b661f3eee40539bb8a4 export RELATED_IMAGE_TEST_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/test-operator@sha256:c85b39f2ac267b373b84dda5cfd88304eba5b5a8481045fe36f864a0b2c152fe diff --git a/internal/controller/core/openstackcontrolplane_controller.go b/internal/controller/core/openstackcontrolplane_controller.go index f9a5a55f70..6bdc2c04e3 100644 --- a/internal/controller/core/openstackcontrolplane_controller.go +++ b/internal/controller/core/openstackcontrolplane_controller.go @@ -54,8 +54,8 @@ import ( "github.com/openstack-k8s-operators/openstack-operator/internal/openstack" rabbitmqv1 "github.com/openstack-k8s-operators/infra-operator/apis/rabbitmq/v1beta1" + placementv1 "github.com/openstack-k8s-operators/nova-operator/api/placement/v1beta1" ovnv1 "github.com/openstack-k8s-operators/ovn-operator/api/v1beta1" - placementv1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1" swiftv1 "github.com/openstack-k8s-operators/swift-operator/api/v1beta1" telemetryv1 "github.com/openstack-k8s-operators/telemetry-operator/api/v1beta1" watcherv1 "github.com/openstack-k8s-operators/watcher-operator/api/v1beta1" diff --git a/internal/controller/operator/openstack_controller.go b/internal/controller/operator/openstack_controller.go index 53337d3843..f4a9628171 100644 --- a/internal/controller/operator/openstack_controller.go +++ b/internal/controller/operator/openstack_controller.go @@ -256,6 +256,11 @@ func (r *OpenStackReconciler) Reconcile(ctx context.Context, req ctrl.Request) ( Log.Error(err, "Failed to cleanup rabbitmq-cluster-operator resources") } + // cleanup placement-operator (now managed by nova-operator) + if err := r.cleanupPlacementOperator(ctx, instance); err != nil { + Log.Error(err, "Failed to cleanup placement-operator resources") + } + // Check if OPENSTACK_RELEASE_VERSION has changed - if so, delete all owned resources // This is a one-time fix to handle incompatible upgrades shouldReinstall := false @@ -361,7 +366,6 @@ func (r *OpenStackReconciler) Reconcile(ctx context.Context, req ctrl.Request) ( Log.Info("Reconcile complete.") return ctrl.Result{}, nil - } func deleteOwnedResources[L client.ObjectList, T any]( @@ -514,7 +518,6 @@ func isWebhookEndpoint(name string) bool { // checkServiceEndpoints - func (r *OpenStackReconciler) checkServiceEndpoints(ctx context.Context, instance *operatorv1beta1.OpenStack) (ctrl.Result, error) { - Log := r.GetLogger(ctx) endpointSliceList := &discoveryv1.EndpointSliceList{} @@ -615,7 +618,8 @@ func (r *OpenStackReconciler) applyOperator(ctx context.Context, instance *opera { Name: "RETRY_PERIOD", Value: retryPeriod, - }} + }, + } relatedImagesEnv := []corev1.EnvVar{} // maps are not sorted in go, make sure to add the images in a sorted way, @@ -802,12 +806,6 @@ func (r *OpenStackReconciler) applyOperator(ctx context.Context, instance *opera Name: "METRICS_CERTS", Value: "false", }) - case operatorv1beta1.PlacementOperatorName: - serviceOp.Deployment.Manager.Env = append(serviceOp.Deployment.Manager.Env, - corev1.EnvVar{ - Name: "METRICS_CERTS", - Value: "false", - }) case operatorv1beta1.SwiftOperatorName: serviceOp.Deployment.Manager.Env = append(serviceOp.Deployment.Manager.Env, corev1.EnvVar{ @@ -1043,7 +1041,6 @@ func (r *OpenStackReconciler) cleanupObsoleteResources(ctx context.Context, inst } return nil - } // postCleanupObsoleteResources - deletes CSVs for old service operator bundles @@ -1132,12 +1129,10 @@ func (r *OpenStackReconciler) postCleanupObsoleteResources(ctx context.Context, } return nil - } // SetupWithManager sets up the controller with the Manager. func (r *OpenStackReconciler) SetupWithManager(mgr ctrl.Manager) error { - return ctrl.NewControllerManagedBy(mgr). Owns(&appsv1.Deployment{}). For(&operatorv1beta1.OpenStack{}). @@ -1246,3 +1241,49 @@ func (r *OpenStackReconciler) cleanupRabbitMQClusterOperator(ctx context.Context return nil } + +// cleanupPlacementOperator removes the old placement-operator +// resources that are no longer needed since Placement is now managed +// by the nova-operator. +func (r *OpenStackReconciler) cleanupPlacementOperator(ctx context.Context, instance *operatorv1beta1.OpenStack) error { + Log := r.GetLogger(ctx) + + // Namespaced resources (scoped to the OpenStack CR namespace only) + namespacedResources := []struct { + gvk schema.GroupVersionKind + name string + }{ + {schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "Deployment"}, "placement-operator-controller-manager"}, + {schema.GroupVersionKind{Group: "", Version: "v1", Kind: "ServiceAccount"}, "placement-operator-controller-manager"}, + {schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Service"}, "placement-operator-controller-manager-metrics-service"}, + {schema.GroupVersionKind{Group: "rbac.authorization.k8s.io", Version: "v1", Kind: "Role"}, "placement-operator-leader-election-role"}, + {schema.GroupVersionKind{Group: "rbac.authorization.k8s.io", Version: "v1", Kind: "RoleBinding"}, "placement-operator-leader-election-rolebinding"}, + {schema.GroupVersionKind{Group: "cert-manager.io", Version: "v1", Kind: "Issuer"}, "placement-operator-selfsigned-issuer"}, + } + + for _, res := range namespacedResources { + obj := &uns.Unstructured{} + obj.SetGroupVersionKind(res.gvk) + obj.SetName(res.name) + obj.SetNamespace(instance.Namespace) + if err := r.Delete(ctx, obj); err != nil { + if !apierrors.IsNotFound(err) { + return fmt.Errorf("failed to delete %s %s: %w", res.gvk.Kind, res.name, err) + } + } else { + Log.Info("Deleted placement-operator resource", "kind", res.gvk.Kind, "name", res.name) + } + } + + // Cluster-scoped RBAC (ClusterRoles, ClusterRoleBindings) is left in + // place intentionally. Without a running operator and ServiceAccount + // they are inert, and deleting them could break a user-installed + // placement-operator in another namespace that shares the same + // resource names. + + // PlacementAPI CRD is NOT deleted because it is now owned and managed + // by the nova-operator. PlacementAPI instances are expected to continue + // existing under nova-operator management. + + return nil +} diff --git a/internal/openstack/common.go b/internal/openstack/common.go index 3b9e914bee..a73b6abc37 100644 --- a/internal/openstack/common.go +++ b/internal/openstack/common.go @@ -38,8 +38,8 @@ import ( corev1 "github.com/openstack-k8s-operators/openstack-operator/api/core/v1beta1" // corev1 "k8s.io/api/core/v1" + placementv1 "github.com/openstack-k8s-operators/nova-operator/api/placement/v1beta1" ovnv1 "github.com/openstack-k8s-operators/ovn-operator/api/v1beta1" - placementv1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1" swiftv1 "github.com/openstack-k8s-operators/swift-operator/api/v1beta1" telemetryv1 "github.com/openstack-k8s-operators/telemetry-operator/api/v1beta1" diff --git a/internal/openstack/placement.go b/internal/openstack/placement.go index 60c17ad57d..96a1d3dab5 100644 --- a/internal/openstack/placement.go +++ b/internal/openstack/placement.go @@ -10,8 +10,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + placementv1 "github.com/openstack-k8s-operators/nova-operator/api/placement/v1beta1" corev1beta1 "github.com/openstack-k8s-operators/openstack-operator/api/core/v1beta1" - placementv1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1" k8s_errors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" diff --git a/test/functional/ctlplane/openstackoperator_controller_test.go b/test/functional/ctlplane/openstackoperator_controller_test.go index d65e71ea14..14e9a29069 100644 --- a/test/functional/ctlplane/openstackoperator_controller_test.go +++ b/test/functional/ctlplane/openstackoperator_controller_test.go @@ -50,10 +50,10 @@ import ( "github.com/openstack-k8s-operators/lib-common/modules/common/tls" manilav1 "github.com/openstack-k8s-operators/manila-operator/api/v1beta1" novav1 "github.com/openstack-k8s-operators/nova-operator/api/nova/v1beta1" + placementv1 "github.com/openstack-k8s-operators/nova-operator/api/placement/v1beta1" clientv1 "github.com/openstack-k8s-operators/openstack-operator/api/client/v1beta1" corev1 "github.com/openstack-k8s-operators/openstack-operator/api/core/v1beta1" ovnv1 "github.com/openstack-k8s-operators/ovn-operator/api/v1beta1" - placementv1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1" watcherv1 "github.com/openstack-k8s-operators/watcher-operator/api/v1beta1" ) diff --git a/test/functional/ctlplane/suite_test.go b/test/functional/ctlplane/suite_test.go index 5ccb24f543..0d2e48c07e 100644 --- a/test/functional/ctlplane/suite_test.go +++ b/test/functional/ctlplane/suite_test.go @@ -47,6 +47,7 @@ import ( mariadbv1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1" neutronv1 "github.com/openstack-k8s-operators/neutron-operator/api/v1beta1" novav1 "github.com/openstack-k8s-operators/nova-operator/api/nova/v1beta1" + placementv1 "github.com/openstack-k8s-operators/nova-operator/api/placement/v1beta1" octaviav1 "github.com/openstack-k8s-operators/octavia-operator/api/v1beta1" backupv1 "github.com/openstack-k8s-operators/openstack-operator/api/backup/v1beta1" openstackclientv1 "github.com/openstack-k8s-operators/openstack-operator/api/client/v1beta1" @@ -54,7 +55,6 @@ import ( dataplanev1beta1 "github.com/openstack-k8s-operators/openstack-operator/api/dataplane/v1beta1" "github.com/openstack-k8s-operators/openstack-operator/internal/openstack" ovnv1 "github.com/openstack-k8s-operators/ovn-operator/api/v1beta1" - placementv1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1" swiftv1 "github.com/openstack-k8s-operators/swift-operator/api/v1beta1" telemetryv1 "github.com/openstack-k8s-operators/telemetry-operator/api/v1beta1" watcherv1 "github.com/openstack-k8s-operators/watcher-operator/api/v1beta1" @@ -166,7 +166,7 @@ var _ = BeforeSuite(func() { "github.com/openstack-k8s-operators/ovn-operator/api", gomod, "bases") Expect(err).ShouldNot(HaveOccurred()) placementv1CRDs, err := test.GetCRDDirFromModule( - "github.com/openstack-k8s-operators/placement-operator/api", gomod, "bases") + "github.com/openstack-k8s-operators/nova-operator/api", gomod, "bases") Expect(err).ShouldNot(HaveOccurred()) swiftv1CRDs, err := test.GetCRDDirFromModule( "github.com/openstack-k8s-operators/swift-operator/api", gomod, "bases")