Skip to content

Commit 128e6cb

Browse files
committed
implement controllers
1 parent faf2a68 commit 128e6cb

21 files changed

+1040
-86
lines changed

api/v1/iprange_types.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,14 @@ import (
2626
// IpRangeSpec defines the desired state of IpRange
2727
type IpRangeSpec struct {
2828
//+kubebuilder:validation:Format=cidr
29-
//+kubebuilder:validation:XValidation:rule="self == oldSelf",message="Field 'ipRange' is immutable"
29+
//+kubebuilder:validation:XValidation:rule="self == oldSelf",message="Field 'startAddress' is immutable"
3030
//+kubebuilder:validation:Required
31-
IpRange string `json:"ipRange"`
31+
StartAddress string `json:"startAddress"`
32+
33+
//+kubebuilder:validation:Format=cidr
34+
//+kubebuilder:validation:XValidation:rule="self == oldSelf",message="Field 'endAddress' is immutable"
35+
//+kubebuilder:validation:Required
36+
EndAddress string `json:"endAddress"`
3237

3338
//+kubebuilder:validation:XValidation:rule="self == oldSelf",message="Field 'tenant' is immutable"
3439
Tenant string `json:"tenant,omitempty"`
@@ -54,7 +59,8 @@ type IpRangeStatus struct {
5459
//+kubebuilder:object:root=true
5560
//+kubebuilder:subresource:status
5661
//+kubebuilder:storageversion
57-
//+kubebuilder:printcolumn:name="IpRange",type=string,JSONPath=`.spec.ipRange`
62+
//+kubebuilder:printcolumn:name="StartAddress",type=string,JSONPath=`.spec.startAddress`
63+
//+kubebuilder:printcolumn:name="EndAddress",type=string,JSONPath=`.spec.endAddress`
5864
//+kubebuilder:printcolumn:name="Ready",type=string,JSONPath=`.status.conditions[?(@.type=="Ready")].status`
5965
//+kubebuilder:printcolumn:name="ID",type=string,JSONPath=`.status.id`
6066
//+kubebuilder:printcolumn:name="URL",type=string,JSONPath=`.status.url`
@@ -94,12 +100,12 @@ var ConditionIpRangeReadyFalse = metav1.Condition{
94100
Type: "Ready",
95101
Status: "False",
96102
Reason: "FailedToReserveIpInNetbox",
97-
Message: "Failed to reserve IP in NetBox",
103+
Message: "Failed to reserve IP Range in NetBox",
98104
}
99105

100106
var ConditionIpRangeReadyFalseDeletionFailed = metav1.Condition{
101107
Type: "Ready",
102108
Status: "False",
103109
Reason: "FailedToDeleteIpInNetbox",
104-
Message: "Failed to delete IP in NetBox",
110+
Message: "Failed to delete IP Range in NetBox",
105111
}

api/v1/iprangeclaim_types.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ type IpRangeClaimSpec struct {
3030
//+kubebuilder:validation:XValidation:rule="self == oldSelf",message="Field 'parentPrefix' is immutable"
3131
ParentPrefix string `json:"parentPrefix"`
3232

33+
//+kubebuilder:validation:Required
34+
//+kubebuilder:validation:XValisation:Minimum=1
35+
//+kubebuilder:validation:XValidation:rule="self == oldSelf",message="Field 'size' is immutable"
36+
Size int `json:"size,omitempty"`
37+
3338
//+kubebuilder:validation:XValidation:rule="self == oldSelf",message="Field 'tenant' is immutable"
3439
Tenant string `json:"tenant,omitempty"`
3540

@@ -44,9 +49,7 @@ type IpRangeClaimSpec struct {
4449

4550
// IpRangeClaimStatus defines the observed state of IpRangeClaim
4651
type IpRangeClaimStatus struct {
47-
IpRange string `json:"ipAddress,omitempty"`
48-
49-
IpRangeDotDecimal string `json:"ipAddressDotDecimal,omitempty"`
52+
IpRange string `json:"ipRange,omitempty"`
5053

5154
IpRangeName string `json:"ipAddressName,omitempty"`
5255

@@ -57,7 +60,7 @@ type IpRangeClaimStatus struct {
5760
//+kubebuilder:subresource:status
5861
//+kubebuilder:storageversion
5962
//+kubebuilder:printcolumn:name="IpRange",type=string,JSONPath=`.status.ipRange`
60-
//+kubebuilder:printcolumn:name="IpAssigned",type=string,JSONPath=`.status.conditions[?(@.type=="IPAssigned")].status`
63+
//+kubebuilder:printcolumn:name="IpRangeAssigned",type=string,JSONPath=`.status.conditions[?(@.type=="IPAssigned")].status`
6164
//+kubebuilder:printcolumn:name="Ready",type=string,JSONPath=`.status.conditions[?(@.type=="Ready")].status`
6265
//+kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
6366
// +kubebuilder:resource:shortName=iprc

api/v1/zz_generated.deepcopy.go

+32-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/main.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -191,15 +191,23 @@ func main() {
191191
os.Exit(1)
192192
}
193193
if err = (&controller.IpRangeClaimReconciler{
194-
Client: mgr.GetClient(),
195-
Scheme: mgr.GetScheme(),
194+
Client: mgr.GetClient(),
195+
Scheme: mgr.GetScheme(),
196+
Recorder: mgr.GetEventRecorderFor("ip-range-claim-controller"),
197+
NetboxClient: netboxClient,
198+
OperatorNamespace: operatorNamespace,
199+
RestConfig: mgr.GetConfig(),
196200
}).SetupWithManager(mgr); err != nil {
197201
setupLog.Error(err, "unable to create controller", "controller", "IpRangeClaim")
198202
os.Exit(1)
199203
}
200204
if err = (&controller.IpRangeReconciler{
201-
Client: mgr.GetClient(),
202-
Scheme: mgr.GetScheme(),
205+
Client: mgr.GetClient(),
206+
Scheme: mgr.GetScheme(),
207+
Recorder: mgr.GetEventRecorderFor("ip-address-claim-controller"),
208+
NetboxClient: netboxClient,
209+
OperatorNamespace: operatorNamespace,
210+
RestConfig: mgr.GetConfig(),
203211
}).SetupWithManager(mgr); err != nil {
204212
setupLog.Error(err, "unable to create controller", "controller", "IpRange")
205213
os.Exit(1)

config/crd/bases/netbox.dev_iprangeclaims.yaml

+8-5
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ spec:
2121
name: IpRange
2222
type: string
2323
- jsonPath: .status.conditions[?(@.type=="IPAssigned")].status
24-
name: IpAssigned
24+
name: IpRangeAssigned
2525
type: string
2626
- jsonPath: .status.conditions[?(@.type=="Ready")].status
2727
name: Ready
@@ -70,6 +70,11 @@ spec:
7070
rule: self == oldSelf
7171
preserveInNetbox:
7272
type: boolean
73+
size:
74+
type: integer
75+
x-kubernetes-validations:
76+
- message: Field 'size' is immutable
77+
rule: self == oldSelf
7378
tenant:
7479
type: string
7580
x-kubernetes-validations:
@@ -150,12 +155,10 @@ spec:
150155
- type
151156
type: object
152157
type: array
153-
ipAddress:
154-
type: string
155-
ipAddressDotDecimal:
156-
type: string
157158
ipAddressName:
158159
type: string
160+
ipRange:
161+
type: string
159162
type: object
160163
type: object
161164
served: true

config/crd/bases/netbox.dev_ipranges.yaml

+15-5
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@ spec:
1717
scope: Namespaced
1818
versions:
1919
- additionalPrinterColumns:
20-
- jsonPath: .spec.ipRange
21-
name: IpRange
20+
- jsonPath: .spec.startAddress
21+
name: StartAddress
22+
type: string
23+
- jsonPath: .spec.endAddress
24+
name: EndAddress
2225
type: string
2326
- jsonPath: .status.conditions[?(@.type=="Ready")].status
2427
name: Ready
@@ -65,21 +68,28 @@ spec:
6568
type: object
6669
description:
6770
type: string
68-
ipRange:
71+
endAddress:
6972
format: cidr
7073
type: string
7174
x-kubernetes-validations:
72-
- message: Field 'ipRange' is immutable
75+
- message: Field 'endAddress' is immutable
7376
rule: self == oldSelf
7477
preserveInNetbox:
7578
type: boolean
79+
startAddress:
80+
format: cidr
81+
type: string
82+
x-kubernetes-validations:
83+
- message: Field 'startAddress' is immutable
84+
rule: self == oldSelf
7685
tenant:
7786
type: string
7887
x-kubernetes-validations:
7988
- message: Field 'tenant' is immutable
8089
rule: self == oldSelf
8190
required:
82-
- ipRange
91+
- endAddress
92+
- startAddress
8393
type: object
8494
status:
8595
description: IpRangeStatus defines the observed state of IpRange

config/samples/_v1_iprange.yaml

-9
This file was deleted.

config/samples/kustomization.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ resources:
44
- netbox_v1_ipaddressclaim.yaml
55
- netbox_v1_prefix.yaml
66
- netbox_v1_prefixclaim.yaml
7-
- _v1_iprangeclaim.yaml
8-
- _v1_iprange.yaml
7+
- netbox_v1_iprangeclaim.yaml
8+
- netbox_v1_iprange.yaml
99
#+kubebuilder:scaffold:manifestskustomizesamples

config/samples/netbox_v1_iprange.yaml

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: netbox.dev/v1
2+
kind: IpRange
3+
metadata:
4+
labels:
5+
app.kubernetes.io/name: netbox-operator
6+
app.kubernetes.io/managed-by: kustomize
7+
name: iprange-sample
8+
spec:
9+
tenant: "Dunder-Mifflin, Inc."
10+
description: "some description"
11+
comments: "your comments"
12+
preserveInNetbox: true
13+
startAddress: "2.0.0.200/32"
14+
endAddress: "2.0.0.202/32"

config/samples/_v1_iprangeclaim.yaml config/samples/netbox_v1_iprangeclaim.yaml

+6-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,9 @@ metadata:
66
app.kubernetes.io/managed-by: kustomize
77
name: iprangeclaim-sample
88
spec:
9-
# TODO(user): Add fields here
9+
tenant: "Dunder-Mifflin, Inc."
10+
description: "some description"
11+
comments: "your comments"
12+
preserveInNetbox: true
13+
parentPrefix: "2.0.0.0/16"
14+
size: 3

gen/mock_interfaces/netbox_mocks.go

+80
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)