diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5e1d44d84..9786115f3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ jobs: build: strategy: matrix: - go-version: [1.17.x, 1.18.x] + go-version: [1.19.x] #goarch: [386, amd64, arm, ppc64le, arm64] goarch: [amd64, arm64] os: [ubuntu-latest] #, macos-latest, windows-latest] diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a132e5c16..ff0aa46c3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,8 +4,7 @@ jobs: test: strategy: matrix: - #go-version: [1.15.x, 1.16.x] - go-version: [1.17.x] + go-version: [1.19.x] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: @@ -18,7 +17,7 @@ jobs: uses: actions/checkout@v2 - name: Run Revive Action by building from repository - uses: morphy2k/revive-action@v1.4.1 + uses: morphy2k/revive-action@v2.4.1 with: exclude: "./vendor/..." name: "Revive" @@ -69,7 +68,7 @@ jobs: - name: Set up Go version uses: actions/setup-go@v1 with: - go-version: 1.17 + go-version: 1.19.x - name: Checkout code into the Go module directory uses: actions/checkout@v2 diff --git a/Dockerfile b/Dockerfile index e5660020a..b44309955 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17 +FROM golang:1.19 ADD . /usr/src/whereabouts RUN mkdir -p $GOPATH/src/github.com/k8snetworkplumbingwg/whereabouts WORKDIR $GOPATH/src/github.com/k8snetworkplumbingwg/whereabouts diff --git a/Dockerfile.arm64 b/Dockerfile.arm64 index e1713143a..0b1c7fd54 100644 --- a/Dockerfile.arm64 +++ b/Dockerfile.arm64 @@ -1,4 +1,4 @@ -FROM golang:1.17 +FROM golang:1.19 ADD . /usr/src/whereabouts ENV GOARCH "arm64" diff --git a/cmd/whereabouts_test.go b/cmd/whereabouts_test.go index af529cc52..98f8ae853 100644 --- a/cmd/whereabouts_test.go +++ b/cmd/whereabouts_test.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "io/fs" - "io/ioutil" "net" "os" "strings" @@ -145,7 +144,7 @@ var _ = Describe("Whereabouts operations", func() { BeforeEach(func() { var err error - tmpDir, err = ioutil.TempDir("/tmp", "whereabouts") + tmpDir, err = os.MkdirTemp("/tmp", "whereabouts") Expect(err).ToNot(HaveOccurred()) kubeConfigPath = fmt.Sprintf("%s/%s", tmpDir, whereaboutsConfigFile) Expect(os.WriteFile(kubeConfigPath, kubeconfig(), fs.ModePerm)).To(Succeed()) @@ -234,6 +233,30 @@ var _ = Describe("Whereabouts operations", func() { ) }) + It("allocates and releases an IPv6 range that ends with zeroes with a Kubernetes backend", func() { + + ipVersion := "6" + ipRange := "2001:db8:480:603d:0304:0403:000:0000-2001:db8:480:603d:0304:0403:0000:0004/64" + ipGateway := "2001:db8:480:603d::1" + expectedAddress := "2001:db8:480:603d:0304:0403:000:0000/64" + + AllocateAndReleaseAddressesTest( + ipVersion, + ipamConfig(podName, podNamespace, ipRange, ipGateway, kubeConfigPath), + []string{expectedAddress}, + ) + + ipRange = "2001:db8:5422:0005::-2001:db8:5422:0005:7fff:ffff:ffff:ffff/64" + ipGateway = "2001:db8:5422:0005::1" + expectedAddress = "2001:db8:5422:0005::/64" + + AllocateAndReleaseAddressesTest( + ipVersion, + ipamConfig(podName, podNamespace, ipRange, ipGateway, kubeConfigPath), + []string{expectedAddress}, + ) + }) + It("allocates IPv6 addresses with DNS-1123 conformant naming with a Kubernetes backend", func() { ipVersion := "6" diff --git a/e2e/client/ippool.go b/e2e/client/ippool.go index 194069982..5157bcec0 100644 --- a/e2e/client/ippool.go +++ b/e2e/client/ippool.go @@ -17,7 +17,7 @@ func isIPPoolAllocationsEmpty(k8sIPAM *kubeClient.KubernetesIPAM, ipPoolName str return func() (bool, error) { ipPool, err := k8sIPAM.GetIPPool(context.Background(), ipPoolName) noPoolError := fmt.Errorf("k8s pool initialized") - if errors.As(err, &noPoolError) { + if errors.Is(err, noPoolError) { return true, nil } else if err != nil { return false, err diff --git a/go.mod b/go.mod index 558fbba62..8bb0bcfa5 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/k8snetworkplumbingwg/whereabouts -go 1.17 +go 1.19 require ( github.com/blang/semver v3.5.1+incompatible diff --git a/go.sum b/go.sum index 59a1f590b..2e9031501 100644 --- a/go.sum +++ b/go.sum @@ -791,7 +791,6 @@ k8s.io/gengo v0.0.0-20211129171323-c02415ce4185 h1:TT1WdmqqXareKxZ/oNXEUSwKlLiHz k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= diff --git a/pkg/api/whereabouts.cni.cncf.io/v1alpha1/zz_generated.deepcopy.go b/pkg/api/whereabouts.cni.cncf.io/v1alpha1/zz_generated.deepcopy.go index 6fc63bd7e..18d1e4b1f 100644 --- a/pkg/api/whereabouts.cni.cncf.io/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/api/whereabouts.cni.cncf.io/v1alpha1/zz_generated.deepcopy.go @@ -1,3 +1,4 @@ +//go:build !ignore_autogenerated // +build !ignore_autogenerated // Code generated by controller-gen. DO NOT EDIT. diff --git a/pkg/client/clientset/versioned/clientset.go b/pkg/client/clientset/versioned/clientset.go index 2bcb94dd8..d62009227 100644 --- a/pkg/client/clientset/versioned/clientset.go +++ b/pkg/client/clientset/versioned/clientset.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/doc.go b/pkg/client/clientset/versioned/doc.go index 023e8cb0c..c96cc7638 100644 --- a/pkg/client/clientset/versioned/doc.go +++ b/pkg/client/clientset/versioned/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/fake/clientset_generated.go b/pkg/client/clientset/versioned/fake/clientset_generated.go index bdd75b0a9..cc612df55 100644 --- a/pkg/client/clientset/versioned/fake/clientset_generated.go +++ b/pkg/client/clientset/versioned/fake/clientset_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/fake/doc.go b/pkg/client/clientset/versioned/fake/doc.go index fc6be49ec..b3516b841 100644 --- a/pkg/client/clientset/versioned/fake/doc.go +++ b/pkg/client/clientset/versioned/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/fake/register.go b/pkg/client/clientset/versioned/fake/register.go index 91586fde3..ecda40017 100644 --- a/pkg/client/clientset/versioned/fake/register.go +++ b/pkg/client/clientset/versioned/fake/register.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,14 +36,14 @@ var localSchemeBuilder = runtime.SchemeBuilder{ // AddToScheme adds all types of this clientset into the given scheme. This allows composition // of clientsets, like in: // -// import ( -// "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kubernetes/scheme" -// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" -// ) +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) // -// kclientset, _ := kubernetes.NewForConfig(c) -// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) // // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types // correctly. diff --git a/pkg/client/clientset/versioned/scheme/doc.go b/pkg/client/clientset/versioned/scheme/doc.go index 5b786b60e..c2ef9f987 100644 --- a/pkg/client/clientset/versioned/scheme/doc.go +++ b/pkg/client/clientset/versioned/scheme/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/scheme/register.go b/pkg/client/clientset/versioned/scheme/register.go index 660d0cc18..fced29932 100644 --- a/pkg/client/clientset/versioned/scheme/register.go +++ b/pkg/client/clientset/versioned/scheme/register.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,14 +36,14 @@ var localSchemeBuilder = runtime.SchemeBuilder{ // AddToScheme adds all types of this clientset into the given scheme. This allows composition // of clientsets, like in: // -// import ( -// "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kubernetes/scheme" -// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" -// ) +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) // -// kclientset, _ := kubernetes.NewForConfig(c) -// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) // // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types // correctly. diff --git a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/doc.go b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/doc.go index c3a41caa8..1368a893d 100644 --- a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/doc.go +++ b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/doc.go b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/doc.go index 83af49a9a..a854eb270 100644 --- a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/doc.go +++ b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_ippool.go b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_ippool.go index 4e514ee41..eb9ddf5e5 100644 --- a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_ippool.go +++ b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_ippool.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_overlappingrangeipreservation.go b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_overlappingrangeipreservation.go index 58b896d53..003ffbdd0 100644 --- a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_overlappingrangeipreservation.go +++ b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_overlappingrangeipreservation.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_whereabouts.cni.cncf.io_client.go b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_whereabouts.cni.cncf.io_client.go index ff4207719..41bf61eb5 100644 --- a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_whereabouts.cni.cncf.io_client.go +++ b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/fake/fake_whereabouts.cni.cncf.io_client.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/generated_expansion.go b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/generated_expansion.go index 46d2d6266..5703bc3f0 100644 --- a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/generated_expansion.go +++ b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/ippool.go b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/ippool.go index 9385ee6e6..d19ed1bf9 100644 --- a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/ippool.go +++ b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/ippool.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go index c182206b8..3f3765dc1 100644 --- a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go +++ b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/whereabouts.cni.cncf.io_client.go b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/whereabouts.cni.cncf.io_client.go index e6ce36442..0ac06e0e5 100644 --- a/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/whereabouts.cni.cncf.io_client.go +++ b/pkg/client/clientset/versioned/typed/whereabouts.cni.cncf.io/v1alpha1/whereabouts.cni.cncf.io_client.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/informers/externalversions/factory.go b/pkg/client/informers/externalversions/factory.go index 86e6e5122..b5ef4ccf0 100644 --- a/pkg/client/informers/externalversions/factory.go +++ b/pkg/client/informers/externalversions/factory.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/informers/externalversions/generic.go b/pkg/client/informers/externalversions/generic.go index 4eea52b5e..766b21407 100644 --- a/pkg/client/informers/externalversions/generic.go +++ b/pkg/client/informers/externalversions/generic.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go b/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go index cc34d1a2f..5d0b1958a 100644 --- a/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go +++ b/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/interface.go b/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/interface.go index 63a10ecb9..f37a1fb13 100644 --- a/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/interface.go +++ b/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/interface.go b/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/interface.go index 4e0b90191..90855a3b3 100644 --- a/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/interface.go +++ b/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/ippool.go b/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/ippool.go index 096e2963a..aadbe8782 100644 --- a/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/ippool.go +++ b/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/ippool.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go b/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go index b21a9d67f..702ba6dd7 100644 --- a/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go +++ b/pkg/client/informers/externalversions/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/expansion_generated.go b/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/expansion_generated.go index 3faa09403..976ec3eb1 100644 --- a/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/expansion_generated.go +++ b/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/ippool.go b/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/ippool.go index 204e5f3e4..cd0ce5af2 100644 --- a/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/ippool.go +++ b/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/ippool.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go b/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go index 6ea630ccc..9e158f0d2 100644 --- a/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go +++ b/pkg/client/listers/whereabouts.cni.cncf.io/v1alpha1/overlappingrangeipreservation.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The Kubernetes Authors +Copyright 2023 The Kubernetes Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/config/config.go b/pkg/config/config.go index edceb8ffc..dd29ab32e 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -3,7 +3,7 @@ package config import ( "encoding/json" "fmt" - "io/ioutil" + "io" "net" "os" "strings" @@ -246,9 +246,9 @@ func GetFlatIPAM(isControlLoop bool, IPAM *types.IPAMConfig, extraConfigPaths .. defer jsonFile.Close() - jsonBytes, err := ioutil.ReadAll(jsonFile) + jsonBytes, err := io.ReadAll(jsonFile) if err != nil { - return flatipam, foundflatfile, fmt.Errorf("LoadIPAMConfig Flatfile (%s) - ioutil.ReadAll error: %s", confpath, err) + return flatipam, foundflatfile, fmt.Errorf("LoadIPAMConfig Flatfile (%s) - io.ReadAll error: %s", confpath, err) } if err := json.Unmarshal(jsonBytes, &flatipam.IPAM); err != nil { diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index aab2b06ba..54b8f6838 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -2,8 +2,8 @@ package config import ( "fmt" - "io/ioutil" "net" + "os" "testing" . "github.com/onsi/ginkgo" @@ -61,7 +61,7 @@ var _ = Describe("Allocation operations", func() { "gateway": "192.168.5.5" }` - err := ioutil.WriteFile("/tmp/whereabouts.conf", []byte(globalconf), 0755) + err := os.WriteFile("/tmp/whereabouts.conf", []byte(globalconf), 0755) Expect(err).NotTo(HaveOccurred()) conf := `{ @@ -107,7 +107,7 @@ var _ = Describe("Allocation operations", func() { "gateway": "192.168.5.5", "enable_overlapping_ranges": false }` - Expect(ioutil.WriteFile("/tmp/whereabouts.conf", []byte(globalConf), 0755)).To(Succeed()) + Expect(os.WriteFile("/tmp/whereabouts.conf", []byte(globalConf), 0755)).To(Succeed()) ipamconfig, _, err := LoadIPAMConfig([]byte(generateIPAMConfWithOverlappingRanges()), "") Expect(err).NotTo(HaveOccurred()) @@ -126,7 +126,7 @@ var _ = Describe("Allocation operations", func() { "gateway": "192.168.5.5", "enable_overlapping_ranges": true }` - Expect(ioutil.WriteFile("/tmp/whereabouts.conf", []byte(globalConf), 0755)).To(Succeed()) + Expect(os.WriteFile("/tmp/whereabouts.conf", []byte(globalConf), 0755)).To(Succeed()) ipamconfig, _, err := LoadIPAMConfig([]byte(generateIPAMConfWithoutOverlappingRanges()), "") Expect(err).NotTo(HaveOccurred()) diff --git a/pkg/controlloop/pod_controller_test.go b/pkg/controlloop/pod_controller_test.go index de8d318ed..a5aa413c2 100644 --- a/pkg/controlloop/pod_controller_test.go +++ b/pkg/controlloop/pod_controller_test.go @@ -3,7 +3,6 @@ package controlloop import ( "context" "fmt" - "io/ioutil" "os" "path" "testing" @@ -45,10 +44,10 @@ var _ = Describe("IPControlLoop", func() { const configFilePermissions = 0755 var err error - cniConfigDir, err = ioutil.TempDir("", "multus-config") + cniConfigDir, err = os.MkdirTemp("", "multus-config") Expect(err).ToNot(HaveOccurred()) Expect(os.MkdirAll(path.Join(cniConfigDir, path.Dir(whereaboutsConfigPath)), configFilePermissions)).To(Succeed()) - Expect(ioutil.WriteFile( + Expect(os.WriteFile( path.Join(cniConfigDir, whereaboutsConfigPath), []byte(dummyWhereaboutsConfig()), configFilePermissions)).To(Succeed()) }) diff --git a/pkg/storage/kubernetes/ipam.go b/pkg/storage/kubernetes/ipam.go index 574b79c0f..d9aa79bb4 100644 --- a/pkg/storage/kubernetes/ipam.go +++ b/pkg/storage/kubernetes/ipam.go @@ -118,7 +118,11 @@ func (i *KubernetesIPAM) GetIPPool(ctx context.Context, ipRange string) (storage func NormalizeRange(ipRange string) string { // v6 filter + if ipRange[len(ipRange)-1] == ':' { + ipRange = ipRange + "0" + } normalized := strings.ReplaceAll(ipRange, ":", "-") + // replace subnet cidr slash normalized = strings.ReplaceAll(normalized, "/", "-") return normalized @@ -178,7 +182,12 @@ func (i *KubernetesIPAM) GetOverlappingRangeStore() (storage.OverlappingRangeSto func (c *KubernetesOverlappingRangeStore) IsAllocatedInOverlappingRange(ctx context.Context, ip net.IP) (bool, error) { // IPv6 doesn't make for valid CR names, so normalize it. - normalizedip := strings.ReplaceAll(fmt.Sprint(ip), ":", "-") + ipStr := fmt.Sprint(ip) + if ipStr[len(ipStr)-1] == ':' { + ipStr += "0" + logging.Debugf("modified: %s", ipStr) + } + normalizedip := strings.ReplaceAll(ipStr, ":", "-") logging.Debugf("OverlappingRangewide allocation check for IP: %v", normalizedip) @@ -199,7 +208,12 @@ func (c *KubernetesOverlappingRangeStore) IsAllocatedInOverlappingRange(ctx cont // UpdateOverlappingRangeAllocation updates clusterwide allocation for overlapping ranges. func (c *KubernetesOverlappingRangeStore) UpdateOverlappingRangeAllocation(ctx context.Context, mode int, ip net.IP, containerID string, podRef string) error { // Normalize the IP - normalizedip := strings.ReplaceAll(fmt.Sprint(ip), ":", "-") + ipStr := fmt.Sprint(ip) + if ipStr[len(ipStr)-1] == ':' { + ipStr += "0" + logging.Debugf("modified: %s", ipStr) + } + normalizedip := strings.ReplaceAll(ipStr, ":", "-") clusteripres := &whereaboutsv1alpha1.OverlappingRangeIPReservation{ ObjectMeta: metav1.ObjectMeta{Name: normalizedip, Namespace: c.namespace},