Skip to content

Commit 27774e1

Browse files
Merge pull request #8 from PDOK/jd/pdok-17799-wfs-reconcile
WFS Reconcile
2 parents 7c90a8d + 6c29494 commit 27774e1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+5059
-1098
lines changed

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ jobs:
2020
- name: Run linter
2121
uses: golangci/golangci-lint-action@v6
2222
with:
23-
version: v1.63.4
23+
version: v1.64.8

.golangci.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ run:
44
timeout: 5m
55

66
# Modules download mode (do not modify go.mod)
7-
module-download-mode: readonly
7+
modules-download-mode: readonly
88

99
# Include test files (see below to exclude certain linters)
1010
tests: true
@@ -20,7 +20,9 @@ issues:
2020
- funlen
2121

2222
output:
23-
formats: colored-line-number
23+
formats:
24+
- format: colored-line-number
25+
path: stdout
2426
print-issued-lines: true
2527
print-linter-name: true
2628

Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Build the manager binary
2-
FROM docker.io/golang:1.23 AS builder
2+
FROM docker.io/golang:1.24 AS builder
33
ARG TARGETOS
44
ARG TARGETARCH
55

@@ -8,8 +8,6 @@ WORKDIR /workspace
88
COPY go.mod go.mod
99
COPY go.sum go.sum
1010

11-
COPY --from=repos ./smooth-operator /smooth-operator
12-
1311
# cache deps before building and copying source so that we don't need to re-download as much
1412
# and so that source changes don't invalidate our downloaded layer
1513
RUN go mod download

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ CONTROLLER_TOOLS_VERSION ?= v0.17.1
179179
ENVTEST_VERSION ?= $(shell go list -m -f "{{ .Version }}" sigs.k8s.io/controller-runtime | awk -F'[v.]' '{printf "release-%d.%d", $$2, $$3}')
180180
#ENVTEST_K8S_VERSION is the version of Kubernetes to use for setting up ENVTEST binaries (i.e. 1.31)
181181
ENVTEST_K8S_VERSION ?= $(shell go list -m -f "{{ .Version }}" k8s.io/api | awk -F'[v.]' '{printf "1.%d", $$3}')
182-
GOLANGCI_LINT_VERSION ?= v1.63.4
182+
GOLANGCI_LINT_VERSION ?= v1.64.8
183183

184184
.PHONY: kustomize
185185
kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary.

api/v2beta1/shared_conversion.go

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ package v2beta1
22

33
import (
44
"fmt"
5+
56
pdoknlv3 "github.com/pdok/mapserver-operator/api/v3"
67
shared_model "github.com/pdok/smooth-operator/model"
7-
autoscalingv2 "k8s.io/api/autoscaling/v2beta1"
8+
autoscalingv2 "k8s.io/api/autoscaling/v2"
89
corev1 "k8s.io/api/core/v1"
910
)
1011

@@ -15,12 +16,12 @@ func Pointer[T interface{}](val T) *T {
1516
func PointerVal[T interface{}](val *T, def T) T {
1617
if val == nil {
1718
return def
18-
} else {
19-
return *val
2019
}
20+
21+
return *val
2122
}
2223

23-
func ConverseOptionsV2ToV3(src WMSWFSOptions) *pdoknlv3.Options {
24+
func ConvertOptionsV2ToV3(src WMSWFSOptions) *pdoknlv3.Options {
2425
return &pdoknlv3.Options{
2526
AutomaticCasing: src.AutomaticCasing,
2627
IncludeIngress: src.IncludeIngress,
@@ -32,7 +33,7 @@ func ConverseOptionsV2ToV3(src WMSWFSOptions) *pdoknlv3.Options {
3233
}
3334
}
3435

35-
func ConverseOptionsV3ToV2(src *pdoknlv3.Options) WMSWFSOptions {
36+
func ConvertOptionsV3ToV2(src *pdoknlv3.Options) WMSWFSOptions {
3637
return WMSWFSOptions{
3738
AutomaticCasing: src.AutomaticCasing,
3839
PrefetchData: src.PrefetchData,
@@ -44,9 +45,10 @@ func ConverseOptionsV3ToV2(src *pdoknlv3.Options) WMSWFSOptions {
4445
}
4546
}
4647

47-
func ConverseAutoscaling(src Autoscaling) *autoscalingv2.HorizontalPodAutoscalerSpec {
48+
func ConvertAutoscaling(src Autoscaling) *autoscalingv2.HorizontalPodAutoscalerSpec {
4849
var minReplicas *int32
4950
if src.MinReplicas != nil {
51+
//nolint:gosec
5052
minReplicas = Pointer(int32(*src.MinReplicas))
5153
}
5254

@@ -60,8 +62,11 @@ func ConverseAutoscaling(src Autoscaling) *autoscalingv2.HorizontalPodAutoscaler
6062
metrics = append(metrics, autoscalingv2.MetricSpec{
6163
Type: autoscalingv2.ResourceMetricSourceType,
6264
Resource: &autoscalingv2.ResourceMetricSource{
63-
Name: corev1.ResourceCPU,
64-
TargetAverageUtilization: Pointer(int32(*src.AverageCPUUtilization)),
65+
Name: corev1.ResourceCPU,
66+
Target: autoscalingv2.MetricTarget{
67+
Type: autoscalingv2.UtilizationMetricType,
68+
AverageUtilization: Pointer(int32(*src.AverageCPUUtilization)),
69+
},
6570
},
6671
})
6772
}
@@ -73,7 +78,7 @@ func ConverseAutoscaling(src Autoscaling) *autoscalingv2.HorizontalPodAutoscaler
7378
}
7479
}
7580

76-
func ConverseResources(src corev1.ResourceRequirements) *corev1.PodSpec {
81+
func ConvertResources(src corev1.ResourceRequirements) *corev1.PodSpec {
7782
return &corev1.PodSpec{
7883
Containers: []corev1.Container{
7984
{
@@ -83,7 +88,7 @@ func ConverseResources(src corev1.ResourceRequirements) *corev1.PodSpec {
8388
}
8489
}
8590

86-
func ConverseColumnAndAliasesV2ToColumnsWithAliasV3(columns []string, aliases map[string]string) []pdoknlv3.Column {
91+
func ConvertColumnAndAliasesV2ToColumnsWithAliasV3(columns []string, aliases map[string]string) []pdoknlv3.Column {
8792
v3Columns := make([]pdoknlv3.Column, 0)
8893
for _, column := range columns {
8994
col := pdoknlv3.Column{
@@ -101,7 +106,7 @@ func ConverseColumnAndAliasesV2ToColumnsWithAliasV3(columns []string, aliases ma
101106
return v3Columns
102107
}
103108

104-
func ConverseColumnsWithAliasV3ToColumnsAndAliasesV2(columns []pdoknlv3.Column) ([]string, map[string]string) {
109+
func ConvertColumnsWithAliasV3ToColumnsAndAliasesV2(columns []pdoknlv3.Column) ([]string, map[string]string) {
105110
v2Columns := make([]string, 0)
106111
v2Aliases := make(map[string]string)
107112

@@ -116,15 +121,15 @@ func ConverseColumnsWithAliasV3ToColumnsAndAliasesV2(columns []pdoknlv3.Column)
116121
return v2Columns, v2Aliases
117122
}
118123

119-
func ConverseV2DataToV3(v2 Data) pdoknlv3.Data {
124+
func ConvertV2DataToV3(v2 Data) pdoknlv3.Data {
120125
v3 := pdoknlv3.Data{}
121126

122127
if v2.GPKG != nil {
123128
v3.Gpkg = &pdoknlv3.Gpkg{
124129
BlobKey: v2.GPKG.BlobKey,
125130
TableName: v2.GPKG.Table,
126131
GeometryType: v2.GPKG.GeometryType,
127-
Columns: ConverseColumnAndAliasesV2ToColumnsWithAliasV3(
132+
Columns: ConvertColumnAndAliasesV2ToColumnsWithAliasV3(
128133
v2.GPKG.Columns,
129134
v2.GPKG.Aliases,
130135
),
@@ -135,7 +140,7 @@ func ConverseV2DataToV3(v2 Data) pdoknlv3.Data {
135140
v3.Postgis = &pdoknlv3.Postgis{
136141
TableName: v2.Postgis.Table,
137142
GeometryType: v2.Postgis.GeometryType,
138-
Columns: ConverseColumnAndAliasesV2ToColumnsWithAliasV3(
143+
Columns: ConvertColumnAndAliasesV2ToColumnsWithAliasV3(
139144
v2.Postgis.Columns,
140145
v2.Postgis.Aliases,
141146
),
@@ -154,11 +159,11 @@ func ConverseV2DataToV3(v2 Data) pdoknlv3.Data {
154159
return v3
155160
}
156161

157-
func ConverseV3DataToV2(v3 pdoknlv3.Data) Data {
162+
func ConvertV3DataToV2(v3 pdoknlv3.Data) Data {
158163
v2 := Data{}
159164

160165
if v3.Gpkg != nil {
161-
columns, aliases := ConverseColumnsWithAliasV3ToColumnsAndAliasesV2(v3.Gpkg.Columns)
166+
columns, aliases := ConvertColumnsWithAliasV3ToColumnsAndAliasesV2(v3.Gpkg.Columns)
162167
v2.GPKG = &GPKG{
163168
BlobKey: v3.Gpkg.BlobKey,
164169
Table: v3.Gpkg.TableName,
@@ -169,7 +174,7 @@ func ConverseV3DataToV2(v3 pdoknlv3.Data) Data {
169174
}
170175

171176
if v3.Postgis != nil {
172-
columns, aliases := ConverseColumnsWithAliasV3ToColumnsAndAliasesV2(v3.Postgis.Columns)
177+
columns, aliases := ConvertColumnsWithAliasV3ToColumnsAndAliasesV2(v3.Postgis.Columns)
173178
v2.Postgis = &Postgis{
174179
Table: v3.Postgis.TableName,
175180
GeometryType: v3.Postgis.GeometryType,
@@ -215,7 +220,7 @@ func NewV2KubernetesObject(lifecycle *shared_model.Lifecycle, podSpecPatch *core
215220

216221
if scalingSpec.Metrics != nil {
217222
kub.Autoscaling.AverageCPUUtilization = Pointer(
218-
int(*scalingSpec.Metrics[0].Resource.TargetAverageUtilization),
223+
int(*scalingSpec.Metrics[0].Resource.Target.AverageUtilization),
219224
)
220225
}
221226
}

api/v2beta1/wfs_conversion.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@ SOFTWARE.
2525
package v2beta1
2626

2727
import (
28-
sharedModel "github.com/pdok/smooth-operator/model"
2928
"log"
3029

30+
sharedModel "github.com/pdok/smooth-operator/model"
31+
3132
"sigs.k8s.io/controller-runtime/pkg/conversion"
3233

3334
pdoknlv3 "github.com/pdok/mapserver-operator/api/v3"
@@ -49,19 +50,19 @@ func (src *WFS) ConvertTo(dstRaw conversion.Hub) error {
4950
}
5051

5152
if src.Spec.Kubernetes.Autoscaling != nil {
52-
dst.Spec.HorizontalPodAutoscalerPatch = ConverseAutoscaling(*src.Spec.Kubernetes.Autoscaling)
53+
dst.Spec.HorizontalPodAutoscalerPatch = ConvertAutoscaling(*src.Spec.Kubernetes.Autoscaling)
5354
}
5455

5556
// TODO converse src.Spec.Kubernetes.HealthCheck when we know what the implementation in v3 will be
5657
if src.Spec.Kubernetes.Resources != nil {
57-
dst.Spec.PodSpecPatch = ConverseResources(*src.Spec.Kubernetes.Resources)
58+
dst.Spec.PodSpecPatch = ConvertResources(*src.Spec.Kubernetes.Resources)
5859
}
5960

60-
dst.Spec.Options = ConverseOptionsV2ToV3(src.Spec.Options)
61+
dst.Spec.Options = ConvertOptionsV2ToV3(src.Spec.Options)
6162

6263
service := pdoknlv3.WFSService{
6364
Prefix: "",
64-
BaseURL: CreateBaseURL("https://service.pdok.nl", "wfs", src.Spec.General),
65+
URL: CreateBaseURL("https://service.pdok.nl", "wfs", src.Spec.General),
6566
OwnerInfoRef: "pdok",
6667
Title: src.Spec.Service.Title,
6768
Abstract: src.Spec.Service.Abstract,
@@ -137,7 +138,7 @@ func convertV2FeatureTypeToV3(src FeatureType) pdoknlv3.FeatureType {
137138
}
138139
}
139140

140-
featureTypeV3.Data = ConverseV2DataToV3(src.Data)
141+
featureTypeV3.Data = ConvertV2DataToV3(src.Data)
141142

142143
return featureTypeV3
143144
}
@@ -157,7 +158,7 @@ func (dst *WFS) ConvertFrom(srcRaw conversion.Hub) error {
157158
dst.Spec.Kubernetes = NewV2KubernetesObject(src.Spec.Lifecycle, src.Spec.PodSpecPatch, src.Spec.HorizontalPodAutoscalerPatch)
158159

159160
if src.Spec.Options != nil {
160-
dst.Spec.Options = ConverseOptionsV3ToV2(src.Spec.Options)
161+
dst.Spec.Options = ConvertOptionsV3ToV2(src.Spec.Options)
161162
}
162163

163164
service := WFSService{
@@ -190,7 +191,7 @@ func (dst *WFS) ConvertFrom(srcRaw conversion.Hub) error {
190191
service.MetadataIdentifier = src.Spec.Service.Inspire.ServiceMetadataURL.CSW.MetadataIdentifier
191192
} else {
192193
service.Inspire = false
193-
// TODO unable to fill in MetadataIdentifier here untill we know how to handle non inspire services
194+
// TODO unable to fill in MetadataIdentifier here until we know how to handle non inspire services
194195
}
195196

196197
for _, featureType := range src.Spec.Service.FeatureTypes {
@@ -201,7 +202,7 @@ func (dst *WFS) ConvertFrom(srcRaw conversion.Hub) error {
201202
Keywords: featureType.Keywords,
202203
DatasetMetadataIdentifier: featureType.DatasetMetadataURL.CSW.MetadataIdentifier,
203204
SourceMetadataIdentifier: "",
204-
Data: ConverseV3DataToV2(featureType.Data),
205+
Data: ConvertV3DataToV2(featureType.Data),
205206
}
206207

207208
if src.Spec.Service.Inspire != nil {

api/v2beta1/wms_conversion.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ SOFTWARE.
2525
package v2beta1
2626

2727
import (
28-
"fmt"
29-
sharedModel "github.com/pdok/smooth-operator/model"
28+
"errors"
3029
"log"
3130
"strconv"
3231

32+
sharedModel "github.com/pdok/smooth-operator/model"
33+
3334
"sigs.k8s.io/controller-runtime/pkg/conversion"
3435

3536
pdoknlv3 "github.com/pdok/mapserver-operator/api/v3"
@@ -54,18 +55,18 @@ func (src *WMS) ConvertTo(dstRaw conversion.Hub) error {
5455
}
5556

5657
if src.Spec.Kubernetes.Autoscaling != nil {
57-
dst.Spec.HorizontalPodAutoscalerPatch = ConverseAutoscaling(*src.Spec.Kubernetes.Autoscaling)
58+
dst.Spec.HorizontalPodAutoscalerPatch = ConvertAutoscaling(*src.Spec.Kubernetes.Autoscaling)
5859
}
5960

6061
// TODO converse src.Spec.Kubernetes.HealthCheck when we know what the implementation in v3 will be
6162
if src.Spec.Kubernetes.Resources != nil {
62-
dst.Spec.PodSpecPatch = ConverseResources(*src.Spec.Kubernetes.Resources)
63+
dst.Spec.PodSpecPatch = ConvertResources(*src.Spec.Kubernetes.Resources)
6364
}
6465

65-
dst.Spec.Options = ConverseOptionsV2ToV3(src.Spec.Options)
66+
dst.Spec.Options = ConvertOptionsV2ToV3(src.Spec.Options)
6667

6768
service := pdoknlv3.WMSService{
68-
BaseURL: CreateBaseURL("https://service.pdok.nl", "wms", src.Spec.General),
69+
URL: CreateBaseURL("https://service.pdok.nl", "wms", src.Spec.General),
6970
OwnerInfoRef: "pdok",
7071
Title: src.Spec.Service.Title,
7172
Abstract: src.Spec.Service.Abstract,
@@ -144,7 +145,7 @@ func (dst *WMS) ConvertFrom(srcRaw conversion.Hub) error {
144145
dst.Spec.Kubernetes = NewV2KubernetesObject(src.Spec.Lifecycle, src.Spec.PodSpecPatch, src.Spec.HorizontalPodAutoscalerPatch)
145146

146147
if src.Spec.Options != nil {
147-
dst.Spec.Options = ConverseOptionsV3ToV2(src.Spec.Options)
148+
dst.Spec.Options = ConvertOptionsV3ToV2(src.Spec.Options)
148149
}
149150

150151
service := WMSService{
@@ -169,7 +170,7 @@ func (dst *WMS) ConvertFrom(srcRaw conversion.Hub) error {
169170
service.MetadataIdentifier = src.Spec.Service.Inspire.ServiceMetadataURL.CSW.MetadataIdentifier
170171
} else {
171172
service.Inspire = false
172-
// TODO unable to fill in MetadataIdentifier here untill we know how to handle non inspire services
173+
// TODO unable to fill in MetadataIdentifier here until we know how to handle non inspire services
173174
}
174175

175176
uuid, ok := src.Annotations[SERVICE_METADATA_IDENTIFIER_ANNOTATION]
@@ -256,7 +257,7 @@ func (v2Service WMSService) GetTopLayer() (*WMSLayer, error) {
256257
}
257258
}
258259

259-
return nil, fmt.Errorf("unable to detect the toplayer of this WMS service")
260+
return nil, errors.New("unable to detect the toplayer of this WMS service")
260261
}
261262

262263
func (v2Service WMSService) GetChildLayers(parent WMSLayer) ([]WMSLayer, error) {
@@ -269,7 +270,7 @@ func (v2Service WMSService) GetChildLayers(parent WMSLayer) ([]WMSLayer, error)
269270
}
270271

271272
if len(children) == 0 {
272-
return children, fmt.Errorf("no child layers found")
273+
return children, errors.New("no child layers found")
273274
}
274275

275276
return children, nil
@@ -372,7 +373,7 @@ func (v2Layer WMSLayer) MapToV3(v2Service WMSService) pdoknlv3.Layer {
372373
}
373374

374375
if v2Layer.Data != nil {
375-
layer.Data = Pointer(ConverseV2DataToV3(*v2Layer.Data))
376+
layer.Data = Pointer(ConvertV2DataToV3(*v2Layer.Data))
376377
} else {
377378
childLayersV2, err := v2Service.GetChildLayers(v2Layer)
378379
if err != nil {
@@ -463,7 +464,7 @@ func mapV3LayerToV2Layers(v3Layer pdoknlv3.Layer, parent *pdoknlv3.Layer, servic
463464
}
464465

465466
if v3Layer.Data != nil {
466-
v2Layer.Data = Pointer(ConverseV3DataToV2(*v3Layer.Data))
467+
v2Layer.Data = Pointer(ConvertV3DataToV2(*v3Layer.Data))
467468
}
468469

469470
layers = append(layers, v2Layer)

api/v2beta1/wms_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ type StylingAssets struct {
109109
BlobKeys []string `json:"blobKeys,omitempty"`
110110
}
111111

112-
// ConfigMapRef contains all the config map name and all keys in that configmap that are relevant
112+
// ConfigMapRef contains all the config map name and all keys in that mapserver that are relevant
113113
// the Keys can be empty, so that the v1 WMS can convert to the v2beta1 WMS
114114
type ConfigMapRef struct {
115115
Name string `json:"name"`

0 commit comments

Comments
 (0)