54d3e38223
The operator previously assumed it created every user and bucket it managed: reconciling an existing resource could overwrite its user attributes or wipe its bucket policy, and deleting a CRD always deleted the underlying RGW object (only Bucket had retainOnDelete). That made taking over pre-existing radosgw state unsafe. Make adoption first-class. - add retainOnDelete to ObjectStoreUser and BucketAccess (dedicated users), so deleting the CRD orphans the RGW user instead of deleting it (symmetric with Bucket) - merge bucket policy instead of replacing it: the operator marks its own statements with a cephrgwop* Sid and preserves any statement it does not own, so adopting a bucket with a hand-written policy keeps it; add Bucket managePolicy (default true) to opt out of policy management entirely - only reconcile user attributes the spec sets: DisplayName when non-empty and Suspended is now an optional *bool, so adopting a user does not reset them - record adoption: ObjectStoreUser/Bucket status.adopted (+ printcolumn) is true when the RGW object already existed on first reconcile - add GetBucketPolicy + MergeBucketPolicy; keyed adoption detection off the status identity field so a Pending owner wait does not mislabel it - regenerate CRDs/deepcopy; add docs/adoption.md and config/samples/05-adoption.yaml; cover the merge in policy_test.go Claude-Session: https://claude.ai/code/session_016CEncETbf8cvy1PhsHfFHM
495 lines
13 KiB
Go
495 lines
13 KiB
Go
//go:build !ignore_autogenerated
|
|
|
|
// Code generated by controller-gen. DO NOT EDIT.
|
|
|
|
package v1alpha1
|
|
|
|
import (
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
|
)
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *AccessConditions) DeepCopyInto(out *AccessConditions) {
|
|
*out = *in
|
|
if in.SourceIPs != nil {
|
|
in, out := &in.SourceIPs, &out.SourceIPs
|
|
*out = make([]string, len(*in))
|
|
copy(*out, *in)
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessConditions.
|
|
func (in *AccessConditions) DeepCopy() *AccessConditions {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(AccessConditions)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *Bucket) DeepCopyInto(out *Bucket) {
|
|
*out = *in
|
|
out.TypeMeta = in.TypeMeta
|
|
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
|
in.Spec.DeepCopyInto(&out.Spec)
|
|
in.Status.DeepCopyInto(&out.Status)
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Bucket.
|
|
func (in *Bucket) DeepCopy() *Bucket {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(Bucket)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
func (in *Bucket) DeepCopyObject() runtime.Object {
|
|
if c := in.DeepCopy(); c != nil {
|
|
return c
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *BucketAccess) DeepCopyInto(out *BucketAccess) {
|
|
*out = *in
|
|
out.TypeMeta = in.TypeMeta
|
|
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
|
in.Spec.DeepCopyInto(&out.Spec)
|
|
in.Status.DeepCopyInto(&out.Status)
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketAccess.
|
|
func (in *BucketAccess) DeepCopy() *BucketAccess {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(BucketAccess)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
func (in *BucketAccess) DeepCopyObject() runtime.Object {
|
|
if c := in.DeepCopy(); c != nil {
|
|
return c
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *BucketAccessList) DeepCopyInto(out *BucketAccessList) {
|
|
*out = *in
|
|
out.TypeMeta = in.TypeMeta
|
|
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
|
if in.Items != nil {
|
|
in, out := &in.Items, &out.Items
|
|
*out = make([]BucketAccess, len(*in))
|
|
for i := range *in {
|
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketAccessList.
|
|
func (in *BucketAccessList) DeepCopy() *BucketAccessList {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(BucketAccessList)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
func (in *BucketAccessList) DeepCopyObject() runtime.Object {
|
|
if c := in.DeepCopy(); c != nil {
|
|
return c
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *BucketAccessSpec) DeepCopyInto(out *BucketAccessSpec) {
|
|
*out = *in
|
|
if in.Paths != nil {
|
|
in, out := &in.Paths, &out.Paths
|
|
*out = make([]string, len(*in))
|
|
copy(*out, *in)
|
|
}
|
|
if in.Actions != nil {
|
|
in, out := &in.Actions, &out.Actions
|
|
*out = make([]string, len(*in))
|
|
copy(*out, *in)
|
|
}
|
|
if in.Conditions != nil {
|
|
in, out := &in.Conditions, &out.Conditions
|
|
*out = new(AccessConditions)
|
|
(*in).DeepCopyInto(*out)
|
|
}
|
|
if in.RawStatements != nil {
|
|
in, out := &in.RawStatements, &out.RawStatements
|
|
*out = make([]PolicyStatement, len(*in))
|
|
for i := range *in {
|
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketAccessSpec.
|
|
func (in *BucketAccessSpec) DeepCopy() *BucketAccessSpec {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(BucketAccessSpec)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *BucketAccessStatus) DeepCopyInto(out *BucketAccessStatus) {
|
|
*out = *in
|
|
if in.Conditions != nil {
|
|
in, out := &in.Conditions, &out.Conditions
|
|
*out = make([]v1.Condition, len(*in))
|
|
for i := range *in {
|
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketAccessStatus.
|
|
func (in *BucketAccessStatus) DeepCopy() *BucketAccessStatus {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(BucketAccessStatus)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *BucketList) DeepCopyInto(out *BucketList) {
|
|
*out = *in
|
|
out.TypeMeta = in.TypeMeta
|
|
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
|
if in.Items != nil {
|
|
in, out := &in.Items, &out.Items
|
|
*out = make([]Bucket, len(*in))
|
|
for i := range *in {
|
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketList.
|
|
func (in *BucketList) DeepCopy() *BucketList {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(BucketList)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
func (in *BucketList) DeepCopyObject() runtime.Object {
|
|
if c := in.DeepCopy(); c != nil {
|
|
return c
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *BucketSpec) DeepCopyInto(out *BucketSpec) {
|
|
*out = *in
|
|
if in.ObjectLock != nil {
|
|
in, out := &in.ObjectLock, &out.ObjectLock
|
|
*out = new(ObjectLock)
|
|
(*in).DeepCopyInto(*out)
|
|
}
|
|
if in.Quota != nil {
|
|
in, out := &in.Quota, &out.Quota
|
|
*out = new(Quota)
|
|
(*in).DeepCopyInto(*out)
|
|
}
|
|
if in.Tags != nil {
|
|
in, out := &in.Tags, &out.Tags
|
|
*out = make(map[string]string, len(*in))
|
|
for key, val := range *in {
|
|
(*out)[key] = val
|
|
}
|
|
}
|
|
if in.ManagePolicy != nil {
|
|
in, out := &in.ManagePolicy, &out.ManagePolicy
|
|
*out = new(bool)
|
|
**out = **in
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketSpec.
|
|
func (in *BucketSpec) DeepCopy() *BucketSpec {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(BucketSpec)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *BucketStatus) DeepCopyInto(out *BucketStatus) {
|
|
*out = *in
|
|
if in.Conditions != nil {
|
|
in, out := &in.Conditions, &out.Conditions
|
|
*out = make([]v1.Condition, len(*in))
|
|
for i := range *in {
|
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketStatus.
|
|
func (in *BucketStatus) DeepCopy() *BucketStatus {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(BucketStatus)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *ObjectLock) DeepCopyInto(out *ObjectLock) {
|
|
*out = *in
|
|
if in.Days != nil {
|
|
in, out := &in.Days, &out.Days
|
|
*out = new(int32)
|
|
**out = **in
|
|
}
|
|
if in.Years != nil {
|
|
in, out := &in.Years, &out.Years
|
|
*out = new(int32)
|
|
**out = **in
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectLock.
|
|
func (in *ObjectLock) DeepCopy() *ObjectLock {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(ObjectLock)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *ObjectStoreUser) DeepCopyInto(out *ObjectStoreUser) {
|
|
*out = *in
|
|
out.TypeMeta = in.TypeMeta
|
|
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
|
in.Spec.DeepCopyInto(&out.Spec)
|
|
in.Status.DeepCopyInto(&out.Status)
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectStoreUser.
|
|
func (in *ObjectStoreUser) DeepCopy() *ObjectStoreUser {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(ObjectStoreUser)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
func (in *ObjectStoreUser) DeepCopyObject() runtime.Object {
|
|
if c := in.DeepCopy(); c != nil {
|
|
return c
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *ObjectStoreUserList) DeepCopyInto(out *ObjectStoreUserList) {
|
|
*out = *in
|
|
out.TypeMeta = in.TypeMeta
|
|
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
|
if in.Items != nil {
|
|
in, out := &in.Items, &out.Items
|
|
*out = make([]ObjectStoreUser, len(*in))
|
|
for i := range *in {
|
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectStoreUserList.
|
|
func (in *ObjectStoreUserList) DeepCopy() *ObjectStoreUserList {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(ObjectStoreUserList)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
func (in *ObjectStoreUserList) DeepCopyObject() runtime.Object {
|
|
if c := in.DeepCopy(); c != nil {
|
|
return c
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *ObjectStoreUserSpec) DeepCopyInto(out *ObjectStoreUserSpec) {
|
|
*out = *in
|
|
if in.MaxBuckets != nil {
|
|
in, out := &in.MaxBuckets, &out.MaxBuckets
|
|
*out = new(int32)
|
|
**out = **in
|
|
}
|
|
if in.Suspended != nil {
|
|
in, out := &in.Suspended, &out.Suspended
|
|
*out = new(bool)
|
|
**out = **in
|
|
}
|
|
if in.Quota != nil {
|
|
in, out := &in.Quota, &out.Quota
|
|
*out = new(Quota)
|
|
(*in).DeepCopyInto(*out)
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectStoreUserSpec.
|
|
func (in *ObjectStoreUserSpec) DeepCopy() *ObjectStoreUserSpec {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(ObjectStoreUserSpec)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *ObjectStoreUserStatus) DeepCopyInto(out *ObjectStoreUserStatus) {
|
|
*out = *in
|
|
if in.Conditions != nil {
|
|
in, out := &in.Conditions, &out.Conditions
|
|
*out = make([]v1.Condition, len(*in))
|
|
for i := range *in {
|
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectStoreUserStatus.
|
|
func (in *ObjectStoreUserStatus) DeepCopy() *ObjectStoreUserStatus {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(ObjectStoreUserStatus)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *PolicyStatement) DeepCopyInto(out *PolicyStatement) {
|
|
*out = *in
|
|
if in.Actions != nil {
|
|
in, out := &in.Actions, &out.Actions
|
|
*out = make([]string, len(*in))
|
|
copy(*out, *in)
|
|
}
|
|
if in.Resources != nil {
|
|
in, out := &in.Resources, &out.Resources
|
|
*out = make([]string, len(*in))
|
|
copy(*out, *in)
|
|
}
|
|
if in.Conditions != nil {
|
|
in, out := &in.Conditions, &out.Conditions
|
|
*out = make(map[string]map[string][]string, len(*in))
|
|
for key, val := range *in {
|
|
var outVal map[string][]string
|
|
if val == nil {
|
|
(*out)[key] = nil
|
|
} else {
|
|
inVal := (*in)[key]
|
|
in, out := &inVal, &outVal
|
|
*out = make(map[string][]string, len(*in))
|
|
for key, val := range *in {
|
|
var outVal []string
|
|
if val == nil {
|
|
(*out)[key] = nil
|
|
} else {
|
|
inVal := (*in)[key]
|
|
in, out := &inVal, &outVal
|
|
*out = make([]string, len(*in))
|
|
copy(*out, *in)
|
|
}
|
|
(*out)[key] = outVal
|
|
}
|
|
}
|
|
(*out)[key] = outVal
|
|
}
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PolicyStatement.
|
|
func (in *PolicyStatement) DeepCopy() *PolicyStatement {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(PolicyStatement)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *Quota) DeepCopyInto(out *Quota) {
|
|
*out = *in
|
|
if in.MaxSizeBytes != nil {
|
|
in, out := &in.MaxSizeBytes, &out.MaxSizeBytes
|
|
*out = new(int64)
|
|
**out = **in
|
|
}
|
|
if in.MaxObjects != nil {
|
|
in, out := &in.MaxObjects, &out.MaxObjects
|
|
*out = new(int64)
|
|
**out = **in
|
|
}
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Quota.
|
|
func (in *Quota) DeepCopy() *Quota {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(Quota)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|
|
|
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
func (in *SecretKeyRef) DeepCopyInto(out *SecretKeyRef) {
|
|
*out = *in
|
|
}
|
|
|
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretKeyRef.
|
|
func (in *SecretKeyRef) DeepCopy() *SecretKeyRef {
|
|
if in == nil {
|
|
return nil
|
|
}
|
|
out := new(SecretKeyRef)
|
|
in.DeepCopyInto(out)
|
|
return out
|
|
}
|