Skip to content
Open
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
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ CONTROLLER_TOOLS_VERSION ?= v0.17.1
ENVTEST_VERSION ?= release-0.22
GOLANGCI_LINT_VERSION ?= v2.7.2
KAL_VERSION ?= v0.0.0-20250924094418-502783c08f9d
MOCKGEN_VERSION ?= v0.5.0
MOCKGEN_VERSION ?= v0.6.0
KUTTL_VERSION ?= v0.23.0
GOVULNCHECK_VERSION ?= v1.1.4
OPERATOR_SDK_VERSION ?= v1.41.1
Expand Down
8 changes: 8 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,14 @@ resources:
kind: Subnet
path: github.com/k-orc/openstack-resource-controller/api/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
domain: k-orc.cloud
group: openstack
kind: Trunk
path: github.com/k-orc/openstack-resource-controller/api/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ kubectl delete -f $ORC_RELEASE
| server group | | ✔ | ✔ |
| service | | ✔ | ✔ |
| subnet | | ◐ | ◐ |
| trunk | | ✔ | ✔ |
| volume | | ◐ | ◐ |
| volume type | | ◐ | ◐ |

Expand Down
102 changes: 102 additions & 0 deletions api/v1alpha1/trunk_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
/*
Copyright 2025 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

// TrunkResourceSpec contains the desired state of the resource.
type TrunkResourceSpec struct {
// name will be the name of the created resource. If not specified, the
// name of the ORC object will be used.
// +optional
Name *OpenStackName `json:"name,omitempty"`

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

// portRef is a reference to the ORC Port which this resource is associated with.
// +required
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="portRef is immutable"
PortRef KubernetesNameRef `json:"portRef,omitempty"`

// projectRef is a reference to the ORC Project which this resource is associated with.
// +optional
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="projectRef is immutable"
ProjectRef *KubernetesNameRef `json:"projectRef,omitempty"`

// TODO(scaffolding): Add more types.
// To see what is supported, you can take inspiration from the CreateOpts structure from
// github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/trunks
//
// Until you have implemented mutability for the field, you must add a CEL validation
// preventing the field being modified:
// `// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="<fieldname> is immutable"`
}

// TrunkFilter defines an existing resource by its properties
// +kubebuilder:validation:MinProperties:=1
type TrunkFilter struct {
// name of the existing resource
// +optional
Name *OpenStackName `json:"name,omitempty"`

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

// portRef is a reference to the ORC Port which this resource is associated with.
// +optional
PortRef *KubernetesNameRef `json:"portRef,omitempty"`

// projectRef is a reference to the ORC Project which this resource is associated with.
// +optional
ProjectRef *KubernetesNameRef `json:"projectRef,omitempty"`

// TODO(scaffolding): Add more types.
// To see what is supported, you can take inspiration from the ListOpts structure from
// github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/trunks
}

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

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

// portID is the ID of the Port to which the resource is associated.
// +kubebuilder:validation:MaxLength=1024
// +optional
PortID string `json:"portID,omitempty"`

// projectID is the ID of the Project to which the resource is associated.
// +kubebuilder:validation:MaxLength=1024
// +optional
ProjectID string `json:"projectID,omitempty"`

// TODO(scaffolding): Add more types.
// To see what is supported, you can take inspiration from the Trunk structure from
// github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/trunks
}
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