Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
8ae7bc6
[AISOS-1946] Define DNSRecordset API Type Definitions and Validation …
Jun 25, 2026
a905266
[AISOS-1948] Implement DNSRecordset OpenStack Designate Service Client
Jun 25, 2026
6c49bb1
[AISOS-1949] Integrate DNSRecordset Client into Provider Scope and Re…
Jun 25, 2026
ecbe926
[AISOS-1950] Create DNSRecordset Controller and Register with Manager
Jun 25, 2026
9effd90
[AISOS-1951] Implement Core DNSRecordset Actuator Lifecycle Operations
Jun 25, 2026
d2b7b95
[AISOS-1952] Implement DNSRecordset Configuration Validation Helpers
Jun 25, 2026
2b947a4
[AISOS-1953] Implement DNSRecordsetStatusWriter Status Mapping and St…
Jun 25, 2026
13339d8
[AISOS-1954] Implement Test Suite and API Validation Tests for DNSRec…
Jun 25, 2026
14baddf
[AISOS-1942-review] Local code review — fix breaking issues
Jun 25, 2026
48705d1
[AISOS-1942-review] Fix breaking issue in DNSRecordset API validations
Jun 25, 2026
1365500
[AISOS-1942-docs] Update user-guide documentation to cover the new DN…
Jun 25, 2026
faa508d
[AISOS-1942-ci-fix] Apply CI fix plan for DNSRecordset
Jun 25, 2026
26d92c1
[AISOS-1942-review-ci-fix-1] Post-ci-fix-1 code review and fix for in…
Jun 25, 2026
a416bc3
[AISOS-1942-ci-fix] Override dependency name for dnsZoneImportDepende…
Jun 25, 2026
7f18cee
[AISOS-1942-ci-fix] Avoid adding finalizers to deleting objects in de…
Jun 25, 2026
dec35a3
[AISOS-1942-review-ci-fix-3] Fix DNS suffix collision vulnerability i…
Jun 25, 2026
574b932
[AISOS-1942-ci-fix] Implement DNSRecordset parallel deletion fix and …
Jun 25, 2026
9ea86e5
[AISOS-1942-ci-analyze] Fix finalizer collisions in deletion guard de…
Jun 28, 2026
078dd85
[AISOS-1942-ci-fix] Redefine dnsZoneImportDependency as NewDependency…
Jun 28, 2026
9ccf4ed
[AISOS-1942-review-fix] Implement PR review plan for AISOS-1942
Jun 29, 2026
4dcc728
[AISOS-1942-review-review-impl] Post-review-impl code review and vali…
Jun 29, 2026
e736aef
[AISOS-1942-ci-analyze] Fix dnsrecordset-create-minimal KUTTL assert …
Jun 29, 2026
bbdc188
[AISOS-1942] review: address PR feedback
Jun 29, 2026
d69b45a
Increase Designate zone quota in e2e jobs
eshulman2 Jun 30, 2026
f66265a
[AISOS-1942] review: address PR feedback
Jun 30, 2026
a919dd6
[AISOS-1942-review-review-impl] Implement duplicate creation race con…
Jun 30, 2026
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
4 changes: 4 additions & 0 deletions .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ jobs:
enable_plugin manila https://github.com/openstack/manila ${{ matrix.openstack_version }}
enable_plugin designate https://github.com/openstack/designate ${{ matrix.openstack_version }}

[[post-config|/etc/designate/designate.conf]]
[DEFAULT]
quota_zones = 100

[[post-config|/etc/nova/nova.conf]]
[filter_scheduler]
enabled_filters = ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,SameHostFilter,DifferentHostFilter,SimpleCIDRAffinityFilter,JsonFilter
Expand Down
8 changes: 8 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ resources:
kind: ApplicationCredential
path: github.com/k-orc/openstack-resource-controller/api/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
domain: k-orc.cloud
group: openstack
kind: DNSRecordset
path: github.com/k-orc/openstack-resource-controller/api/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
Expand Down
138 changes: 138 additions & 0 deletions api/v1alpha1/dnsrecordset_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
/*
Copyright The ORC Authors.

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 v1alpha1

// DNSRecordsetResourceSpec specifies the desired state of the resource.
type DNSRecordsetResourceSpec struct {
// name will be the name of the created resource. If not specified, the
// name of the ORC object will be used.
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="name is immutable"
// +kubebuilder:validation:XValidation:rule="self.endsWith('.')",message="name must end with a period"
// +optional
Name *OpenStackName `json:"name,omitempty"`

// type is the type of the recordset (e.g., A, AAAA, CNAME, MX, TXT, etc.).
Comment thread
eshulman2 marked this conversation as resolved.
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="type is immutable"
// +kubebuilder:validation:MaxLength:=255
// +required
Type string `json:"type"`

// records are the DNS records of the recordset.
// +kubebuilder:validation:MinItems:=1
// +kubebuilder:validation:MaxItems:=1024
// +kubebuilder:validation:items:MaxLength:=1024
// +listType=atomic
// +required
Records []string `json:"records,omitempty"`

// ttl is the Time To Live for the recordset.
// +kubebuilder:validation:Minimum:=1
// +kubebuilder:validation:Maximum:=2147483647
// +optional
TTL *int32 `json:"ttl,omitempty"`

// description is a human-readable description for the resource.
// +kubebuilder:validation:MinLength:=1
// +kubebuilder:validation:MaxLength:=255
// +optional
Description *string `json:"description,omitempty"`

// dnsZoneRef is a reference to the ORC DNSZone this recordset is associated with.
Comment thread
eshulman2 marked this conversation as resolved.
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="dnsZoneRef is immutable"
// +required
DNSZoneRef KubernetesNameRef `json:"dnsZoneRef,omitempty"`
}

// DNSRecordsetFilter defines an existing resource by its properties.
Comment thread
eshulman2 marked this conversation as resolved.
// +kubebuilder:validation:MinProperties:=1
type DNSRecordsetFilter struct {
// dnsZoneRef is a reference to the ORC DNSZone this recordset is associated with.
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="dnsZoneRef is immutable"
// +required
DNSZoneRef KubernetesNameRef `json:"dnsZoneRef,omitempty"`
Comment thread
eshulman2 marked this conversation as resolved.

// name of the existing resource.
// +kubebuilder:validation:XValidation:rule="self.endsWith('.')",message="name must end with a period"
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="name is immutable"
// +required
Name OpenStackName `json:"name"` //nolint:kubeapilinter // Name is required

// type of the existing resource.
// +kubebuilder:validation:MaxLength:=255
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="type is immutable"
// +required
Type string `json:"type"`

// ttl of the existing resource.
// +kubebuilder:validation:Minimum:=1
// +kubebuilder:validation:Maximum:=2147483647
// +optional
TTL *int32 `json:"ttl,omitempty"`

// description of the existing resource.
// +kubebuilder:validation:MinLength:=1
// +kubebuilder:validation:MaxLength:=255
// +optional
Description *string `json:"description,omitempty"`
}

// DNSRecordsetImport specifies an existing resource which will be imported instead of
// creating a new one.
// +kubebuilder:validation:MinProperties:=1
// +kubebuilder:validation:MaxProperties:=1
type DNSRecordsetImport struct {
// filter contains a resource query which is expected to return a single
// result. The controller will continue to retry if filter returns no
// results. If filter returns multiple results the controller will set an
// error state and will not continue to retry.
// +required
Filter *DNSRecordsetFilter `json:"filter,omitempty"` //nolint:kubeapilinter // Filter is a required pointer field because DNSRecordsetImport has no other fields, and required struct fields are represented as pointers across ORC.
}

// DNSRecordsetResourceStatus represents the observed state of the resource.
type DNSRecordsetResourceStatus struct {
// name is a human-readable name for the resource.
// +kubebuilder:validation:MaxLength=1024
// +optional
Name string `json:"name,omitempty"`

// type is the type of the recordset.
// +kubebuilder:validation:MaxLength=255
// +optional
Type string `json:"type,omitempty"`

// records are the DNS records of the recordset.
// +kubebuilder:validation:MaxItems:=1024
// +kubebuilder:validation:items:MaxLength:=1024
// +listType=atomic
// +optional
Records []string `json:"records,omitempty"`

// ttl is the Time To Live for the recordset in seconds.
// +optional
TTL *int32 `json:"ttl,omitempty"`

// description is a human-readable description for the resource.
// +kubebuilder:validation:MaxLength=1024
// +optional
Description string `json:"description,omitempty"`

// status is the status of the resource.
// +kubebuilder:validation:MaxLength=255
// +optional
Status string `json:"status,omitempty"`
}
227 changes: 227 additions & 0 deletions api/v1alpha1/zz_generated.deepcopy.go

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

Loading
Loading