diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 01afaaf..fdfabe1 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -22,10 +22,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Setup Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: go-version-file: 'go.mod' cache: false @@ -34,7 +34,7 @@ jobs: uses: crate-ci/typos@master - name: Lint - uses: golangci/golangci-lint-action@v8 + uses: golangci/golangci-lint-action@v9 with: args: --build-tags integration --timeout=5m @@ -62,12 +62,12 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Fetch tags # fetch-tags does not work run: git fetch --prune --unshallow --tags - name: Setup Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: go-version-file: 'go.mod' diff --git a/Dockerfile b/Dockerfile index fecbe34..f1ed89f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.22 +FROM alpine:3.23 LABEL maintainer="metal-stack authors " COPY bin/metalctl-linux-amd64 /metalctl ENTRYPOINT ["/metalctl"] diff --git a/Dockerfile.test b/Dockerfile.test index 169d632..8e8c866 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -1,4 +1,4 @@ -FROM golang:1.25 +FROM golang:1.26 WORKDIR /work COPY go.* . RUN go mod download diff --git a/cmd/audit_test.go b/cmd/audit_test.go index 35c351b..4de9d72 100644 --- a/cmd/audit_test.go +++ b/cmd/audit_test.go @@ -10,7 +10,6 @@ import ( "github.com/metal-stack/metal-go/api/client/audit" "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-go/test/client" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" "github.com/stretchr/testify/mock" @@ -79,22 +78,22 @@ func Test_AuditCmd_MultiResult(t *testing.T) { auditTrace2, auditTrace1, }, - wantTable: pointer.Pointer(` + wantTable: new(` TIME REQUEST ID COMPONENT DETAIL PATH CODE USER 2022-05-19 01:03:03 b5817ef7-980a-41ef-9ed3-741a143870b0 test POST /v1/audit 403 b-user 2022-05-19 01:02:03 c40ad996-e1fd-4511-a7bf-418219cb8d91 example GET /v1/audit 200 a-user `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` TIME REQUEST ID COMPONENT DETAIL PATH CODE USER TENANT BODY 2022-05-19 01:03:03 b5817ef7-980a-41ef-9ed3-741a143870b0 test POST /v1/audit 403 b-user b-tenant {"c": "d"} 2022-05-19 01:02:03 c40ad996-e1fd-4511-a7bf-418219cb8d91 example GET /v1/audit 200 a-user a-tenant {"a": "b"} `), - template: pointer.Pointer(`{{ date "02/01/2006" .timestamp }} {{ .rqid }}`), - wantTemplate: pointer.Pointer(` + template: new(`{{ date "02/01/2006" .timestamp }} {{ .rqid }}`), + wantTemplate: new(` 19/05/2022 b5817ef7-980a-41ef-9ed3-741a143870b0 19/05/2022 c40ad996-e1fd-4511-a7bf-418219cb8d91 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | TIME | REQUEST ID | COMPONENT | DETAIL | PATH | CODE | USER | |---------------------|--------------------------------------|-----------|--------|-----------|------|--------| | 2022-05-19 01:03:03 | b5817ef7-980a-41ef-9ed3-741a143870b0 | test | POST | /v1/audit | 403 | b-user | @@ -154,19 +153,19 @@ TIME REQUEST ID COMPONENT DETAIL PA want: []*models.V1AuditResponse{ auditTrace1, }, - wantTable: pointer.Pointer(` + wantTable: new(` TIME REQUEST ID COMPONENT DETAIL PATH CODE USER 2022-05-19 01:02:03 c40ad996-e1fd-4511-a7bf-418219cb8d91 example GET /v1/audit 200 a-user `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` TIME REQUEST ID COMPONENT DETAIL PATH CODE USER TENANT BODY 2022-05-19 01:02:03 c40ad996-e1fd-4511-a7bf-418219cb8d91 example GET /v1/audit 200 a-user a-tenant {"a": "b"} `), - template: pointer.Pointer(`{{ date "02/01/2006" .timestamp }} {{ .rqid }}`), - wantTemplate: pointer.Pointer(` + template: new(`{{ date "02/01/2006" .timestamp }} {{ .rqid }}`), + wantTemplate: new(` 19/05/2022 c40ad996-e1fd-4511-a7bf-418219cb8d91 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | TIME | REQUEST ID | COMPONENT | DETAIL | PATH | CODE | USER | |---------------------|--------------------------------------|-----------|--------|-----------|------|--------| | 2022-05-19 01:02:03 | c40ad996-e1fd-4511-a7bf-418219cb8d91 | example | GET | /v1/audit | 200 | a-user |`), diff --git a/cmd/filesystemlayout.go b/cmd/filesystemlayout.go index b9d7706..e46328a 100644 --- a/cmd/filesystemlayout.go +++ b/cmd/filesystemlayout.go @@ -8,7 +8,6 @@ import ( "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-lib/pkg/genericcli" "github.com/metal-stack/metal-lib/pkg/genericcli/printers" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metalctl/cmd/sorters" "github.com/spf13/cobra" @@ -175,8 +174,8 @@ func (c *fslCmd) filesystemTry() error { func (c *fslCmd) filesystemMatch() error { match := models.V1FilesystemLayoutMatchRequest{ - Machine: pointer.Pointer(viper.GetString("machine")), - Filesystemlayout: pointer.Pointer(viper.GetString("filesystemlayout")), + Machine: new(viper.GetString("machine")), + Filesystemlayout: new(viper.GetString("filesystemlayout")), } resp, err := c.client.Filesystemlayout().MatchFilesystemLayout(fsmodel.NewMatchFilesystemLayoutParams().WithBody(&match), nil) diff --git a/cmd/filesystemlayout_test.go b/cmd/filesystemlayout_test.go index eb01fbc..724e69e 100644 --- a/cmd/filesystemlayout_test.go +++ b/cmd/filesystemlayout_test.go @@ -6,7 +6,6 @@ import ( fsmodel "github.com/metal-stack/metal-go/api/client/filesystemlayout" "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-go/test/client" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" "github.com/spf13/afero" @@ -25,43 +24,43 @@ var ( Description: "fsl 1", Disks: []*models.V1Disk{ { - Device: pointer.Pointer("/dev/sda"), + Device: new("/dev/sda"), Partitions: []*models.V1DiskPartition{ { - Gpttype: pointer.Pointer("ef00"), + Gpttype: new("ef00"), Label: "efi", - Number: pointer.Pointer(int64(1)), - Size: pointer.Pointer(int64(1000)), + Number: new(int64(1)), + Size: new(int64(1000)), }, }, - Wipeonreinstall: pointer.Pointer(true), + Wipeonreinstall: new(true), }, }, Filesystems: []*models.V1Filesystem{ { Createoptions: []string{"-F 32"}, - Device: pointer.Pointer("/dev/sda1"), - Format: pointer.Pointer("vfat"), + Device: new("/dev/sda1"), + Format: new("vfat"), Label: "efi", Mountoptions: []string{"noexec"}, Path: "/boot/efi", }, { Createoptions: []string{}, - Device: pointer.Pointer("tmpfs"), - Format: pointer.Pointer("tmpfs"), + Device: new("tmpfs"), + Format: new("tmpfs"), Label: "", Mountoptions: []string{"noexec"}, Path: "/tmp", }, }, - ID: pointer.Pointer("1"), + ID: new("1"), Logicalvolumes: []*models.V1LogicalVolume{ { - Lvmtype: pointer.Pointer("linear"), - Name: pointer.Pointer("varlib"), - Size: pointer.Pointer(int64(5000)), - Volumegroup: pointer.Pointer("lvm"), + Lvmtype: new("linear"), + Name: new("varlib"), + Size: new(int64(5000)), + Volumegroup: new("lvm"), }, }, Name: "fsl1", @@ -69,7 +68,7 @@ var ( Volumegroups: []*models.V1VolumeGroup{ { Devices: []string{"/dev/nvme0n1"}, - Name: pointer.Pointer("lvm"), + Name: new("lvm"), Tags: []string{}, }, }, @@ -84,35 +83,35 @@ var ( Description: "fsl 2", Disks: []*models.V1Disk{ { - Device: pointer.Pointer("/dev/sda"), + Device: new("/dev/sda"), Partitions: []*models.V1DiskPartition{ { - Gpttype: pointer.Pointer("ef00"), + Gpttype: new("ef00"), Label: "efi", - Number: pointer.Pointer(int64(1)), - Size: pointer.Pointer(int64(1000)), + Number: new(int64(1)), + Size: new(int64(1000)), }, }, - Wipeonreinstall: pointer.Pointer(true), + Wipeonreinstall: new(true), }, }, Filesystems: []*models.V1Filesystem{ { Createoptions: []string{}, - Device: pointer.Pointer("tmpfs"), - Format: pointer.Pointer("tmpfs"), + Device: new("tmpfs"), + Format: new("tmpfs"), Label: "", Mountoptions: []string{"noexec"}, Path: "/tmp", }, }, - ID: pointer.Pointer("2"), + ID: new("2"), Logicalvolumes: []*models.V1LogicalVolume{ { - Lvmtype: pointer.Pointer("linear"), - Name: pointer.Pointer("varlib"), - Size: pointer.Pointer(int64(5000)), - Volumegroup: pointer.Pointer("lvm"), + Lvmtype: new("linear"), + Name: new("varlib"), + Size: new(int64(5000)), + Volumegroup: new("lvm"), }, }, Name: "fsl2", @@ -120,7 +119,7 @@ var ( Volumegroups: []*models.V1VolumeGroup{ { Devices: []string{"/dev/nvme0n1"}, - Name: pointer.Pointer("lvm"), + Name: new("lvm"), Tags: []string{}, }, }, @@ -148,24 +147,24 @@ func Test_FilesystemLayoutCmd_MultiResult(t *testing.T) { fsl1, fsl2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID DESCRIPTION FILESYSTEMS SIZES IMAGES 1 fsl 1 /tmp tmpfs size1 os-image * /boot/efi /dev/sda1 2 fsl 2 /tmp tmpfs size1 os-image * `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID DESCRIPTION FILESYSTEMS SIZES IMAGES 1 fsl 1 /tmp tmpfs size1 os-image * /boot/efi /dev/sda1 2 fsl 2 /tmp tmpfs size1 os-image * `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 fsl1 2 fsl2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | DESCRIPTION | FILESYSTEMS | SIZES | IMAGES | |----|-------------|----------------------|-------|------------| | 1 | fsl 1 | /tmp tmpfs | size1 | os-image * | @@ -275,21 +274,21 @@ func Test_FilesystemLayoutCmd_SingleResult(t *testing.T) { }, }, want: fsl1, - wantTable: pointer.Pointer(` + wantTable: new(` ID DESCRIPTION FILESYSTEMS SIZES IMAGES 1 fsl 1 /tmp tmpfs size1 os-image * /boot/efi /dev/sda1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID DESCRIPTION FILESYSTEMS SIZES IMAGES 1 fsl 1 /tmp tmpfs size1 os-image * /boot/efi /dev/sda1 `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 fsl1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | DESCRIPTION | FILESYSTEMS | SIZES | IMAGES | |----|-------------|----------------------|-------|------------| | 1 | fsl 1 | /tmp tmpfs | size1 | os-image * | diff --git a/cmd/firewall.go b/cmd/firewall.go index cb6562f..472c74e 100644 --- a/cmd/firewall.go +++ b/cmd/firewall.go @@ -191,7 +191,7 @@ func firewallResponseToCreate(r *models.V1FirewallResponse) *models.V1FirewallCr for _, s := range allocation.Networks { ips = append(ips, s.Ips...) networks = append(networks, &models.V1MachineAllocationNetwork{ - Autoacquire: pointer.Pointer(len(s.Ips) == 0), + Autoacquire: new(len(s.Ips) == 0), Networkid: s.Networkid, }) } diff --git a/cmd/firewall_test.go b/cmd/firewall_test.go index 928974d..3a3fc82 100644 --- a/cmd/firewall_test.go +++ b/cmd/firewall_test.go @@ -19,170 +19,170 @@ var ( firewall1 = &models.V1FirewallResponse{ Allocation: &models.V1MachineAllocation{ BootInfo: &models.V1BootInfo{ - Bootloaderid: pointer.Pointer("bootloaderid"), - Cmdline: pointer.Pointer("cmdline"), - ImageID: pointer.Pointer("imageid"), - Initrd: pointer.Pointer("initrd"), - Kernel: pointer.Pointer("kernel"), - OsPartition: pointer.Pointer("ospartition"), - PrimaryDisk: pointer.Pointer("primarydisk"), + Bootloaderid: new("bootloaderid"), + Cmdline: new("cmdline"), + ImageID: new("imageid"), + Initrd: new("initrd"), + Kernel: new("kernel"), + OsPartition: new("ospartition"), + PrimaryDisk: new("primarydisk"), }, - Created: pointer.Pointer(strfmt.DateTime(testTime.Add(-14 * 24 * time.Hour))), - Creator: pointer.Pointer("creator"), + Created: new(strfmt.DateTime(testTime.Add(-14 * 24 * time.Hour))), + Creator: new("creator"), Description: "firewall allocation 1", Filesystemlayout: fsl1, - Hostname: pointer.Pointer("firewall-hostname-1"), + Hostname: new("firewall-hostname-1"), Image: image1, - Name: pointer.Pointer("firewall-1"), + Name: new("firewall-1"), Networks: []*models.V1MachineNetwork{ { - Asn: pointer.Pointer(int64(200)), + Asn: new(int64(200)), Destinationprefixes: []string{"2.2.2.2"}, Ips: []string{"1.1.1.1"}, - Nat: pointer.Pointer(false), - Networkid: pointer.Pointer("private"), + Nat: new(false), + Networkid: new("private"), Networktype: pointer.Pointer(net.PrivatePrimaryUnshared), Prefixes: []string{"prefixes"}, - Private: pointer.Pointer(true), - Underlay: pointer.Pointer(false), - Vrf: pointer.Pointer(int64(100)), + Private: new(true), + Underlay: new(false), + Vrf: new(int64(100)), }, }, - Project: pointer.Pointer("project-1"), - Reinstall: pointer.Pointer(false), + Project: new("project-1"), + Reinstall: new(false), Role: pointer.Pointer(models.V1MachineAllocationRoleFirewall), SSHPubKeys: []string{"sshpubkey"}, - Succeeded: pointer.Pointer(true), + Succeeded: new(true), UserData: "---userdata---", - DNSServers: []*models.V1DNSServer{{IP: pointer.Pointer("8.8.8.8")}}, - NtpServers: []*models.V1NTPServer{{Address: pointer.Pointer("1.pool.ntp.org")}}, + DNSServers: []*models.V1DNSServer{{IP: new("8.8.8.8")}}, + NtpServers: []*models.V1NTPServer{{Address: new("1.pool.ntp.org")}}, }, Bios: &models.V1MachineBIOS{ - Date: pointer.Pointer("biosdata"), - Vendor: pointer.Pointer("biosvendor"), - Version: pointer.Pointer("biosversion"), + Date: new("biosdata"), + Vendor: new("biosvendor"), + Version: new("biosversion"), }, Description: "firewall 1", Events: &models.V1MachineRecentProvisioningEvents{ - CrashLoop: pointer.Pointer(false), - FailedMachineReclaim: pointer.Pointer(false), + CrashLoop: new(false), + FailedMachineReclaim: new(false), LastErrorEvent: &models.V1MachineProvisioningEvent{ - Event: pointer.Pointer("Crashed"), + Event: new("Crashed"), Message: "crash", Time: strfmt.DateTime(testTime.Add(-10 * 24 * time.Hour)), }, LastEventTime: strfmt.DateTime(testTime.Add(-7 * 24 * time.Hour)), Log: []*models.V1MachineProvisioningEvent{ { - Event: pointer.Pointer("Phoned Home"), + Event: new("Phoned Home"), Message: "phoning home", Time: strfmt.DateTime(testTime.Add(-7 * 24 * time.Hour)), }, }, }, Hardware: &models.V1MachineHardware{ - CPUCores: pointer.Pointer(int32(16)), + CPUCores: new(int32(16)), Disks: []*models.V1MachineBlockDevice{}, - Memory: pointer.Pointer(int64(32)), + Memory: new(int64(32)), Nics: []*models.V1MachineNic{}, }, - ID: pointer.Pointer("1"), + ID: new("1"), Ledstate: &models.V1ChassisIdentifyLEDState{ - Description: pointer.Pointer(""), - Value: pointer.Pointer(""), + Description: new(""), + Value: new(""), }, - Liveliness: pointer.Pointer("Alive"), + Liveliness: new("Alive"), Name: "firewall-1", Partition: partition1, Rackid: "rack-1", Size: size1, State: &models.V1MachineState{ - Description: pointer.Pointer("state"), + Description: new("state"), Issuer: "issuer", - MetalHammerVersion: pointer.Pointer("version"), - Value: pointer.Pointer(""), + MetalHammerVersion: new("version"), + Value: new(""), }, Tags: []string{"a"}, } firewall2 = &models.V1FirewallResponse{ Allocation: &models.V1MachineAllocation{ BootInfo: &models.V1BootInfo{ - Bootloaderid: pointer.Pointer("bootloaderid"), - Cmdline: pointer.Pointer("cmdline"), - ImageID: pointer.Pointer("imageid"), - Initrd: pointer.Pointer("initrd"), - Kernel: pointer.Pointer("kernel"), - OsPartition: pointer.Pointer("ospartition"), - PrimaryDisk: pointer.Pointer("primarydisk"), + Bootloaderid: new("bootloaderid"), + Cmdline: new("cmdline"), + ImageID: new("imageid"), + Initrd: new("initrd"), + Kernel: new("kernel"), + OsPartition: new("ospartition"), + PrimaryDisk: new("primarydisk"), }, - Created: pointer.Pointer(strfmt.DateTime(testTime.Add(-14 * 24 * time.Hour))), - Creator: pointer.Pointer("creator"), + Created: new(strfmt.DateTime(testTime.Add(-14 * 24 * time.Hour))), + Creator: new("creator"), Description: "firewall allocation 2", Filesystemlayout: fsl1, - Hostname: pointer.Pointer("firewall-hostname-2"), + Hostname: new("firewall-hostname-2"), Image: image1, - Name: pointer.Pointer("firewall-2"), + Name: new("firewall-2"), Networks: []*models.V1MachineNetwork{ { - Asn: pointer.Pointer(int64(200)), + Asn: new(int64(200)), Destinationprefixes: []string{"2.2.2.2"}, Ips: []string{"1.1.1.1"}, - Nat: pointer.Pointer(false), - Networkid: pointer.Pointer("private"), + Nat: new(false), + Networkid: new("private"), Networktype: pointer.Pointer(net.PrivatePrimaryUnshared), Prefixes: []string{"prefixes"}, - Private: pointer.Pointer(true), - Underlay: pointer.Pointer(false), - Vrf: pointer.Pointer(int64(100)), + Private: new(true), + Underlay: new(false), + Vrf: new(int64(100)), }, }, - Project: pointer.Pointer("project-1"), - Reinstall: pointer.Pointer(false), + Project: new("project-1"), + Reinstall: new(false), Role: pointer.Pointer(models.V1MachineAllocationRoleFirewall), SSHPubKeys: []string{"sshpubkey"}, - Succeeded: pointer.Pointer(true), + Succeeded: new(true), UserData: "---userdata---", }, Bios: &models.V1MachineBIOS{ - Date: pointer.Pointer("biosdata"), - Vendor: pointer.Pointer("biosvendor"), - Version: pointer.Pointer("biosversion"), + Date: new("biosdata"), + Vendor: new("biosvendor"), + Version: new("biosversion"), }, Description: "firewall 2", Events: &models.V1MachineRecentProvisioningEvents{ - CrashLoop: pointer.Pointer(false), - FailedMachineReclaim: pointer.Pointer(false), + CrashLoop: new(false), + FailedMachineReclaim: new(false), LastErrorEvent: &models.V1MachineProvisioningEvent{}, LastEventTime: strfmt.DateTime(testTime.Add(-1 * time.Minute)), Log: []*models.V1MachineProvisioningEvent{ { - Event: pointer.Pointer("Phoned Home"), + Event: new("Phoned Home"), Message: "phoning home", Time: strfmt.DateTime{}, }, }, }, Hardware: &models.V1MachineHardware{ - CPUCores: pointer.Pointer(int32(16)), + CPUCores: new(int32(16)), Disks: []*models.V1MachineBlockDevice{}, - Memory: pointer.Pointer(int64(32)), + Memory: new(int64(32)), Nics: []*models.V1MachineNic{}, }, - ID: pointer.Pointer("2"), + ID: new("2"), Ledstate: &models.V1ChassisIdentifyLEDState{ - Description: pointer.Pointer(""), - Value: pointer.Pointer(""), + Description: new(""), + Value: new(""), }, - Liveliness: pointer.Pointer("Alive"), + Liveliness: new("Alive"), Name: "firewall-2", Partition: partition1, Rackid: "rack-1", Size: size1, State: &models.V1MachineState{ - Description: pointer.Pointer("state"), + Description: new("state"), Issuer: "issuer", - MetalHammerVersion: pointer.Pointer("version"), - Value: pointer.Pointer(""), + MetalHammerVersion: new("version"), + Value: new(""), }, Tags: []string{"b"}, } @@ -212,22 +212,22 @@ func Test_FirewallCmd_MultiResult(t *testing.T) { firewall1, firewall2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID AGE HOSTNAME PROJECT NETWORKS IPS PARTITION 1 14d firewall-hostname-1 project-1 private 1.1.1.1 1 2 14d firewall-hostname-2 project-1 private 1.1.1.1 1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID AGE HOSTNAME PROJECT NETWORKS IPS PARTITION 1 14d firewall-hostname-1 project-1 private 1.1.1.1 1 2 14d firewall-hostname-2 project-1 private 1.1.1.1 1 `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 firewall-1 2 firewall-2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | AGE | HOSTNAME | PROJECT | NETWORKS | IPS | PARTITION | |----|-----|---------------------|-----------|----------|---------|-----------| | 1 | 14d | firewall-hostname-1 | project-1 | private | 1.1.1.1 | 1 | @@ -255,19 +255,19 @@ func Test_FirewallCmd_SingleResult(t *testing.T) { }, }, want: firewall1, - wantTable: pointer.Pointer(` + wantTable: new(` ID AGE HOSTNAME PROJECT NETWORKS IPS PARTITION 1 14d firewall-hostname-1 project-1 private 1.1.1.1 1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID AGE HOSTNAME PROJECT NETWORKS IPS PARTITION 1 14d firewall-hostname-1 project-1 private 1.1.1.1 1 `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 firewall-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | AGE | HOSTNAME | PROJECT | NETWORKS | IPS | PARTITION | |----|-----|---------------------|-----------|----------|---------|-----------| | 1 | 14d | firewall-hostname-1 | project-1 | private | 1.1.1.1 | 1 | diff --git a/cmd/health_test.go b/cmd/health_test.go index 2d79bec..23f772c 100644 --- a/cmd/health_test.go +++ b/cmd/health_test.go @@ -25,7 +25,7 @@ func Test_HealthCmd(t *testing.T) { mock.On("Health", testcommon.MatchIgnoreContext(t, health.NewHealthParams()), nil).Return(&health.HealthOK{ Payload: &models.RestHealthResponse{ Status: pointer.Pointer(string(healthstatus.HealthStatusHealthy)), - Message: pointer.Pointer("ok"), + Message: new("ok"), }, }, nil) }, @@ -46,7 +46,7 @@ func Test_HealthCmd(t *testing.T) { mock.On("Health", testcommon.MatchIgnoreContext(t, health.NewHealthParams()), nil).Return(nil, &health.HealthInternalServerError{ Payload: &models.RestHealthResponse{ Status: pointer.Pointer(string(healthstatus.HealthStatusUnhealthy)), - Message: pointer.Pointer("error"), + Message: new("error"), }, }) }, diff --git a/cmd/helper_test.go b/cmd/helper_test.go index a5eae82..1e4a429 100644 --- a/cmd/helper_test.go +++ b/cmd/helper_test.go @@ -4,7 +4,6 @@ import ( "testing" "github.com/metal-stack/metal-go/api/models" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -31,7 +30,7 @@ func Test_parseNetworks(t *testing.T) { possibleNetworks: []string{"network"}, isError: false, expected: []*models.V1MachineAllocationNetwork{ - {Networkid: pointer.Pointer("network"), Autoacquire: pointer.Pointer(true)}, + {Networkid: new("network"), Autoacquire: new(true)}, }, }, { @@ -39,8 +38,8 @@ func Test_parseNetworks(t *testing.T) { possibleNetworks: []string{"network1", "network2"}, isError: false, expected: []*models.V1MachineAllocationNetwork{ - {Networkid: pointer.Pointer("network1"), Autoacquire: pointer.Pointer(true)}, - {Networkid: pointer.Pointer("network2"), Autoacquire: pointer.Pointer(true)}, + {Networkid: new("network1"), Autoacquire: new(true)}, + {Networkid: new("network2"), Autoacquire: new(true)}, }, }, { @@ -48,7 +47,7 @@ func Test_parseNetworks(t *testing.T) { possibleNetworks: []string{"network:auto"}, isError: false, expected: []*models.V1MachineAllocationNetwork{ - {Networkid: pointer.Pointer("network"), Autoacquire: pointer.Pointer(true)}, + {Networkid: new("network"), Autoacquire: new(true)}, }, }, { @@ -56,9 +55,9 @@ func Test_parseNetworks(t *testing.T) { possibleNetworks: []string{"network1:auto", "network2:noauto", "network3"}, isError: false, expected: []*models.V1MachineAllocationNetwork{ - {Networkid: pointer.Pointer("network1"), Autoacquire: pointer.Pointer(true)}, - {Networkid: pointer.Pointer("network2"), Autoacquire: pointer.Pointer(false)}, - {Networkid: pointer.Pointer("network3"), Autoacquire: pointer.Pointer(true)}, + {Networkid: new("network1"), Autoacquire: new(true)}, + {Networkid: new("network2"), Autoacquire: new(false)}, + {Networkid: new("network3"), Autoacquire: new(true)}, }, }, { @@ -78,7 +77,7 @@ func Test_parseNetworks(t *testing.T) { possibleNetworks: []string{"network:noauto"}, isError: false, expected: []*models.V1MachineAllocationNetwork{ - {Networkid: pointer.Pointer("network"), Autoacquire: pointer.Pointer(false)}, + {Networkid: new("network"), Autoacquire: new(false)}, }, }, } diff --git a/cmd/image.go b/cmd/image.go index 4cdc980..f1fdfde 100644 --- a/cmd/image.go +++ b/cmd/image.go @@ -35,10 +35,10 @@ func newImageCmd(c *config) *cobra.Command { ListPrinter: func() printers.Printer { return c.listPrinter }, CreateRequestFromCLI: func() (*models.V1ImageCreateRequest, error) { return &models.V1ImageCreateRequest{ - ID: pointer.Pointer(viper.GetString("id")), + ID: new(viper.GetString("id")), Name: viper.GetString("name"), Description: viper.GetString("description"), - URL: pointer.Pointer(viper.GetString("url")), + URL: new(viper.GetString("url")), Features: viper.GetStringSlice("features"), }, nil }, @@ -91,7 +91,7 @@ func (c imageCmd) List() ([]*models.V1ImageResponse, error) { Name: viper.GetString("name"), Os: viper.GetString("os"), Version: viper.GetString("version"), - }).WithShowUsage(pointer.Pointer(viper.GetBool("show-usage"))), nil) + }).WithShowUsage(new(viper.GetBool("show-usage"))), nil) if err != nil { return nil, err } diff --git a/cmd/image_test.go b/cmd/image_test.go index d6ba27b..e5c3932 100644 --- a/cmd/image_test.go +++ b/cmd/image_test.go @@ -8,7 +8,6 @@ import ( "github.com/metal-stack/metal-go/api/client/image" "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-go/test/client" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" "github.com/spf13/afero" @@ -17,13 +16,13 @@ import ( ) var ( - imageExpiration = pointer.Pointer(strfmt.DateTime(testTime.Add(3 * 24 * time.Hour))) + imageExpiration = new(strfmt.DateTime(testTime.Add(3 * 24 * time.Hour))) image1 = &models.V1ImageResponse{ Classification: models.DatastoreImageSearchQueryClassificationSupported, Description: "debian-description", ExpirationDate: imageExpiration, Features: []string{"machine"}, - ID: pointer.Pointer("debian"), + ID: new("debian"), Name: "debian-name", URL: "debian-url", Usedby: []string{"abc-def"}, @@ -33,7 +32,7 @@ var ( Description: "ubuntu-description", ExpirationDate: imageExpiration, Features: []string{"machine"}, - ID: pointer.Pointer("ubuntu"), + ID: new("ubuntu"), Name: "ubuntu-name", URL: "ubuntu-url", Usedby: []string{"123"}, @@ -51,7 +50,7 @@ func Test_ImageCmd_MultiResult(t *testing.T) { Image: func(mock *mock.Mock) { mock.On("FindImages", testcommon.MatchIgnoreContext(t, image.NewFindImagesParams().WithBody(&models.V1ImageFindRequest{ Features: []string{}, - }).WithShowUsage(pointer.Pointer(true))), nil).Return(&image.FindImagesOK{ + }).WithShowUsage(new(true))), nil).Return(&image.FindImagesOK{ Payload: []*models.V1ImageResponse{ image2, image1, @@ -63,22 +62,22 @@ func Test_ImageCmd_MultiResult(t *testing.T) { image1, image2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION FEATURES EXPIRATION STATUS USED BY debian debian-name debian-description machine 3d supported 1 ubuntu ubuntu-name ubuntu-description machine 3d supported 1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION FEATURES EXPIRATION STATUS USED BY debian debian-name debian-description machine 3d supported abc-def ubuntu ubuntu-name ubuntu-description machine 3d supported 123 `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` debian debian-name ubuntu ubuntu-name `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | FEATURES | EXPIRATION | STATUS | USED BY | |--------|-------------|--------------------|----------|------------|-----------|---------| | debian | debian-name | debian-description | machine | 3d | supported | 1 | @@ -108,7 +107,7 @@ ubuntu ubuntu-name Name: image1.Name, Os: "debian", Version: "10", - }).WithShowUsage(pointer.Pointer(true))), nil).Return(&image.FindImagesOK{ + }).WithShowUsage(new(true))), nil).Return(&image.FindImagesOK{ Payload: []*models.V1ImageResponse{ image1, }, @@ -118,19 +117,19 @@ ubuntu ubuntu-name want: []*models.V1ImageResponse{ image1, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION FEATURES EXPIRATION STATUS USED BY debian debian-name debian-description machine 3d supported 1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION FEATURES EXPIRATION STATUS USED BY debian debian-name debian-description machine 3d supported abc-def `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` debian debian-name `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | FEATURES | EXPIRATION | STATUS | USED BY | |--------|-------------|--------------------|----------|------------|-----------|---------| | debian | debian-name | debian-description | machine | 3d | supported | 1 | @@ -238,19 +237,19 @@ func Test_ImageCmd_SingleResult(t *testing.T) { }, }, want: image1, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION FEATURES EXPIRATION STATUS USED BY debian debian-name debian-description machine 3d supported `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION FEATURES EXPIRATION STATUS USED BY debian debian-name debian-description machine 3d supported `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` debian debian-name `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | FEATURES | EXPIRATION | STATUS | USED BY | |--------|-------------|--------------------|----------|------------|-----------|---------| | debian | debian-name | debian-description | machine | 3d | supported | | diff --git a/cmd/ip.go b/cmd/ip.go index 8abd439..bb146bb 100644 --- a/cmd/ip.go +++ b/cmd/ip.go @@ -10,7 +10,6 @@ import ( "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-lib/pkg/genericcli" "github.com/metal-stack/metal-lib/pkg/genericcli/printers" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/tag" "github.com/metal-stack/metalctl/cmd/sorters" "github.com/spf13/cobra" @@ -204,9 +203,9 @@ func (c *ipCmd) createRequestFromCLI() (*ipAllocateRequest, error) { V1IPAllocateRequest: &models.V1IPAllocateRequest{ Description: viper.GetString("description"), Name: viper.GetString("name"), - Networkid: pointer.Pointer(viper.GetString("network")), - Projectid: pointer.Pointer(viper.GetString("project")), - Type: pointer.Pointer(viper.GetString("type")), + Networkid: new(viper.GetString("network")), + Projectid: new(viper.GetString("project")), + Type: new(viper.GetString("type")), Tags: viper.GetStringSlice("tags"), Addressfamily: viper.GetString("addressfamily"), }, diff --git a/cmd/ip_test.go b/cmd/ip_test.go index 27c3522..2eaa4e4 100644 --- a/cmd/ip_test.go +++ b/cmd/ip_test.go @@ -17,22 +17,22 @@ import ( var ( ip1 = &models.V1IPResponse{ - Allocationuuid: pointer.Pointer("1"), + Allocationuuid: new("1"), Description: "ip 1", - Ipaddress: pointer.Pointer("1.1.1.1"), + Ipaddress: new("1.1.1.1"), Name: "ip-1", - Networkid: pointer.Pointer("internet"), - Projectid: pointer.Pointer("project-1"), + Networkid: new("internet"), + Projectid: new("project-1"), Tags: []string{"a"}, Type: pointer.Pointer(models.V1IPAllocateRequestTypeEphemeral), } ip2 = &models.V1IPResponse{ - Allocationuuid: pointer.Pointer("2"), + Allocationuuid: new("2"), Description: "ip 2", - Ipaddress: pointer.Pointer("2.2.2.2"), + Ipaddress: new("2.2.2.2"), Name: "ip-2", - Networkid: pointer.Pointer("internet"), - Projectid: pointer.Pointer("project-2"), + Networkid: new("internet"), + Projectid: new("project-2"), Tags: []string{"b"}, Type: pointer.Pointer(models.V1IPAllocateRequestTypeStatic), } @@ -61,22 +61,22 @@ func Test_IPCmd_MultiResult(t *testing.T) { ip1, ip2, }, - wantTable: pointer.Pointer(` + wantTable: new(` IP DESCRIPTION NAME NETWORK PROJECT TYPE TAGS 1.1.1.1 ip 1 ip-1 internet project-1 ephemeral a 2.2.2.2 ip 2 ip-2 internet project-2 static b `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` IP ALLOCATION UUID DESCRIPTION NAME NETWORK PROJECT TYPE TAGS 1.1.1.1 1 ip 1 ip-1 internet project-1 ephemeral a 2.2.2.2 2 ip 2 ip-2 internet project-2 static b `), - template: pointer.Pointer("{{ .ipaddress }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .ipaddress }} {{ .name }}"), + wantTemplate: new(` 1.1.1.1 ip-1 2.2.2.2 ip-2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | IP | DESCRIPTION | NAME | NETWORK | PROJECT | TYPE | TAGS | |---------|-------------|------|----------|-----------|-----------|------| | 1.1.1.1 | ip 1 | ip-1 | internet | project-1 | ephemeral | a | @@ -185,19 +185,19 @@ func Test_IPCmd_SingleResult(t *testing.T) { }, }, want: ip1, - wantTable: pointer.Pointer(` + wantTable: new(` IP DESCRIPTION NAME NETWORK PROJECT TYPE TAGS 1.1.1.1 ip 1 ip-1 internet project-1 ephemeral a `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` IP ALLOCATION UUID DESCRIPTION NAME NETWORK PROJECT TYPE TAGS 1.1.1.1 1 ip 1 ip-1 internet project-1 ephemeral a `), - template: pointer.Pointer("{{ .ipaddress }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .ipaddress }} {{ .name }}"), + wantTemplate: new(` 1.1.1.1 ip-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | IP | DESCRIPTION | NAME | NETWORK | PROJECT | TYPE | TAGS | |---------|-------------|------|----------|-----------|-----------|------| | 1.1.1.1 | ip 1 | ip-1 | internet | project-1 | ephemeral | a | diff --git a/cmd/machine.go b/cmd/machine.go index 25a8fa6..d9f68da 100644 --- a/cmd/machine.go +++ b/cmd/machine.go @@ -657,7 +657,7 @@ func machineResponseToCreate(r *models.V1MachineResponse) *models.V1MachineAlloc for _, s := range allocation.Networks { ips = append(ips, s.Ips...) networks = append(networks, &models.V1MachineAllocationNetwork{ - Autoacquire: pointer.Pointer(len(s.Ips) == 0), + Autoacquire: new(len(s.Ips) == 0), Networkid: s.Networkid, }) } @@ -763,22 +763,22 @@ func machineCreateRequest() (*models.V1MachineAllocateRequest, error) { } for _, s := range dnsServersArgument { - dnsServers = append(dnsServers, &models.V1DNSServer{IP: pointer.Pointer(s)}) + dnsServers = append(dnsServers, &models.V1DNSServer{IP: new(s)}) } for _, s := range ntpServersArgument { - ntpServers = append(ntpServers, &models.V1NTPServer{Address: pointer.Pointer(s)}) + ntpServers = append(ntpServers, &models.V1NTPServer{Address: new(s)}) } mcr := &models.V1MachineAllocateRequest{ Description: viper.GetString("description"), - Partitionid: pointer.Pointer(viper.GetString("partition")), + Partitionid: new(viper.GetString("partition")), Hostname: viper.GetString("hostname"), - Imageid: pointer.Pointer(viper.GetString("image")), + Imageid: new(viper.GetString("image")), Name: viper.GetString("name"), UUID: viper.GetString("id"), - Projectid: pointer.Pointer(viper.GetString("project")), - Sizeid: pointer.Pointer(viper.GetString("size")), + Projectid: new(viper.GetString("project")), + Sizeid: new(viper.GetString("size")), SSHPubKeys: keys, Tags: viper.GetStringSlice("tags"), UserData: userDataArgument, @@ -826,8 +826,8 @@ func (c *machineCmd) updateRequestFromCLI(args []string) (*models.V1MachineUpdat // SSHPublicKeys should can not be updated by metalctl // nolint:exhaustruct return &models.V1MachineUpdateRequest{ - ID: pointer.Pointer(id), - Description: pointer.Pointer(viper.GetString("description")), + ID: new(id), + Description: new(viper.GetString("description")), Tags: newTags, }, nil } @@ -842,7 +842,7 @@ func (c *machineCmd) machineConsolePassword(args []string) error { resp, err := c.client.Machine().GetMachineConsolePassword(machine.NewGetMachineConsolePasswordParams().WithBody(&models.V1MachineConsolePasswordRequest{ ID: &id, - Reason: pointer.Pointer(viper.GetString("reason")), + Reason: new(viper.GetString("reason")), }), nil) if err != nil { return err @@ -1092,7 +1092,7 @@ func (c *machineCmd) machineIdentifyOn(args []string) error { return err } - description := pointer.Pointer(viper.GetString("description")) + description := new(viper.GetString("description")) resp, err := c.client.Machine().ChassisIdentifyLEDOn(machine.NewChassisIdentifyLEDOnParams().WithID(id).WithBody(emptyBody).WithDescription(description), nil) if err != nil { return err @@ -1107,7 +1107,7 @@ func (c *machineCmd) machineIdentifyOff(args []string) error { return err } - description := pointer.Pointer(viper.GetString("description")) + description := new(viper.GetString("description")) resp, err := c.client.Machine().ChassisIdentifyLEDOff(machine.NewChassisIdentifyLEDOffParams().WithID(id).WithBody(emptyBody).WithDescription(description), nil) if err != nil { return err @@ -1124,7 +1124,7 @@ func (c *machineCmd) machineReserve(args []string) error { if viper.GetBool("remove") { resp, err := c.client.Machine().SetMachineState(machine.NewSetMachineStateParams().WithID(id).WithBody(&models.V1MachineState{ - Description: pointer.Pointer(""), + Description: new(""), Value: pointer.Pointer(models.V1MachineStateValueEmpty), }), nil) if err != nil { @@ -1135,7 +1135,7 @@ func (c *machineCmd) machineReserve(args []string) error { } resp, err := c.client.Machine().SetMachineState(machine.NewSetMachineStateParams().WithID(id).WithBody(&models.V1MachineState{ - Description: pointer.Pointer(viper.GetString("description")), + Description: new(viper.GetString("description")), Value: pointer.Pointer(models.V1MachineStateValueRESERVED), }), nil) if err != nil { @@ -1153,7 +1153,7 @@ func (c *machineCmd) machineLock(args []string) error { if viper.GetBool("remove") { resp, err := c.client.Machine().SetMachineState(machine.NewSetMachineStateParams().WithID(id).WithBody(&models.V1MachineState{ - Description: pointer.Pointer(""), + Description: new(""), Value: pointer.Pointer(models.V1MachineStateValueEmpty), }), nil) if err != nil { @@ -1164,7 +1164,7 @@ func (c *machineCmd) machineLock(args []string) error { } resp, err := c.client.Machine().SetMachineState(machine.NewSetMachineStateParams().WithID(id).WithBody(&models.V1MachineState{ - Description: pointer.Pointer(viper.GetString("description")), + Description: new(viper.GetString("description")), Value: pointer.Pointer(models.V1MachineStateValueLOCKED), }), nil) if err != nil { @@ -1181,9 +1181,9 @@ func (c *machineCmd) machineReinstall(args []string) error { } resp, err := c.client.Machine().ReinstallMachine(machine.NewReinstallMachineParams().WithID(id).WithBody(&models.V1MachineReinstallRequest{ - ID: pointer.Pointer(id), + ID: new(id), Description: viper.GetString("description"), - Imageid: pointer.Pointer(viper.GetString("image")), + Imageid: new(viper.GetString("image")), }), nil) if err != nil { return err diff --git a/cmd/machine_test.go b/cmd/machine_test.go index 3ab553d..7a4adc6 100644 --- a/cmd/machine_test.go +++ b/cmd/machine_test.go @@ -23,139 +23,139 @@ var ( machine1 = &models.V1MachineResponse{ Allocation: &models.V1MachineAllocation{ BootInfo: &models.V1BootInfo{ - Bootloaderid: pointer.Pointer("bootloaderid"), - Cmdline: pointer.Pointer("cmdline"), - ImageID: pointer.Pointer("imageid"), - Initrd: pointer.Pointer("initrd"), - Kernel: pointer.Pointer("kernel"), - OsPartition: pointer.Pointer("ospartition"), - PrimaryDisk: pointer.Pointer("primarydisk"), - }, - Created: pointer.Pointer(strfmt.DateTime(testTime.Add(-14 * 24 * time.Hour))), - Creator: pointer.Pointer("creator"), + Bootloaderid: new("bootloaderid"), + Cmdline: new("cmdline"), + ImageID: new("imageid"), + Initrd: new("initrd"), + Kernel: new("kernel"), + OsPartition: new("ospartition"), + PrimaryDisk: new("primarydisk"), + }, + Created: new(strfmt.DateTime(testTime.Add(-14 * 24 * time.Hour))), + Creator: new("creator"), Description: "machine allocation 1", Filesystemlayout: fsl1, - Hostname: pointer.Pointer("machine-hostname-1"), + Hostname: new("machine-hostname-1"), Image: image1, - Name: pointer.Pointer("machine-1"), + Name: new("machine-1"), Networks: []*models.V1MachineNetwork{ { - Asn: pointer.Pointer(int64(200)), + Asn: new(int64(200)), Destinationprefixes: []string{"2.2.2.2"}, Ips: []string{"1.1.1.1"}, - Nat: pointer.Pointer(false), - Networkid: pointer.Pointer("private"), + Nat: new(false), + Networkid: new("private"), Networktype: pointer.Pointer(net.PrivatePrimaryUnshared), Prefixes: []string{"prefixes"}, - Private: pointer.Pointer(true), - Underlay: pointer.Pointer(false), - Vrf: pointer.Pointer(int64(100)), + Private: new(true), + Underlay: new(false), + Vrf: new(int64(100)), }, }, - Project: pointer.Pointer("project-1"), - Reinstall: pointer.Pointer(false), + Project: new("project-1"), + Reinstall: new(false), Role: pointer.Pointer(models.V1MachineAllocationRoleMachine), SSHPubKeys: []string{"sshpubkey"}, - Succeeded: pointer.Pointer(true), + Succeeded: new(true), UserData: "---userdata---", - DNSServers: []*models.V1DNSServer{{IP: pointer.Pointer("8.8.8.8")}}, - NtpServers: []*models.V1NTPServer{{Address: pointer.Pointer("1.pool.ntp.org")}}, + DNSServers: []*models.V1DNSServer{{IP: new("8.8.8.8")}}, + NtpServers: []*models.V1NTPServer{{Address: new("1.pool.ntp.org")}}, }, Bios: &models.V1MachineBIOS{ - Date: pointer.Pointer("biosdata"), - Vendor: pointer.Pointer("biosvendor"), - Version: pointer.Pointer("biosversion"), + Date: new("biosdata"), + Vendor: new("biosvendor"), + Version: new("biosversion"), }, Description: "machine 1", Events: &models.V1MachineRecentProvisioningEvents{ - CrashLoop: pointer.Pointer(false), - FailedMachineReclaim: pointer.Pointer(false), + CrashLoop: new(false), + FailedMachineReclaim: new(false), LastErrorEvent: &models.V1MachineProvisioningEvent{ - Event: pointer.Pointer("Crashed"), + Event: new("Crashed"), Message: "crash", Time: strfmt.DateTime(testTime.Add(-10 * 24 * time.Hour)), }, LastEventTime: strfmt.DateTime(testTime.Add(-7 * 24 * time.Hour)), Log: []*models.V1MachineProvisioningEvent{ { - Event: pointer.Pointer("Phoned Home"), + Event: new("Phoned Home"), Message: "phoning home", Time: strfmt.DateTime(testTime.Add(-7 * 24 * time.Hour)), }, }, }, Hardware: &models.V1MachineHardware{ - CPUCores: pointer.Pointer(int32(16)), + CPUCores: new(int32(16)), Disks: []*models.V1MachineBlockDevice{}, - Memory: pointer.Pointer(int64(32)), + Memory: new(int64(32)), Nics: []*models.V1MachineNic{}, }, - ID: pointer.Pointer("1"), + ID: new("1"), Ledstate: &models.V1ChassisIdentifyLEDState{ - Description: pointer.Pointer(""), - Value: pointer.Pointer(""), + Description: new(""), + Value: new(""), }, - Liveliness: pointer.Pointer("Alive"), + Liveliness: new("Alive"), Name: "machine-1", Partition: partition1, Rackid: "rack-1", Size: size1, State: &models.V1MachineState{ - Description: pointer.Pointer("state"), + Description: new("state"), Issuer: "issuer", - MetalHammerVersion: pointer.Pointer("version"), - Value: pointer.Pointer(""), + MetalHammerVersion: new("version"), + Value: new(""), }, Tags: []string{"a"}, } machine2 = &models.V1MachineResponse{ Bios: &models.V1MachineBIOS{ - Date: pointer.Pointer("biosdata"), - Vendor: pointer.Pointer("biosvendor"), - Version: pointer.Pointer("biosversion"), + Date: new("biosdata"), + Vendor: new("biosvendor"), + Version: new("biosversion"), }, Description: "machine 2", Events: &models.V1MachineRecentProvisioningEvents{ - CrashLoop: pointer.Pointer(false), - FailedMachineReclaim: pointer.Pointer(false), + CrashLoop: new(false), + FailedMachineReclaim: new(false), LastErrorEvent: &models.V1MachineProvisioningEvent{}, LastEventTime: strfmt.DateTime(testTime.Add(-1 * time.Minute)), Log: []*models.V1MachineProvisioningEvent{ { - Event: pointer.Pointer("Waiting"), + Event: new("Waiting"), Message: "waiting", Time: strfmt.DateTime{}, }, }, }, Hardware: &models.V1MachineHardware{ - CPUCores: pointer.Pointer(int32(16)), + CPUCores: new(int32(16)), Disks: []*models.V1MachineBlockDevice{}, - Memory: pointer.Pointer(int64(32)), + Memory: new(int64(32)), Nics: []*models.V1MachineNic{}, }, - ID: pointer.Pointer("2"), + ID: new("2"), Ledstate: &models.V1ChassisIdentifyLEDState{ - Description: pointer.Pointer(""), - Value: pointer.Pointer(""), + Description: new(""), + Value: new(""), }, - Liveliness: pointer.Pointer("Alive"), + Liveliness: new("Alive"), Name: "machine-2", Partition: partition1, Rackid: "rack-1", Size: size1, State: &models.V1MachineState{ - Description: pointer.Pointer("state"), + Description: new("state"), Issuer: "issuer", - MetalHammerVersion: pointer.Pointer("version"), - Value: pointer.Pointer(""), + MetalHammerVersion: new("version"), + Value: new(""), }, Tags: []string{"b"}, } ipmiMachine1 = &models.V1MachineIPMIResponse{ Allocation: machine1.Allocation, Bios: &models.V1MachineBIOS{ - Version: pointer.Pointer("2.0"), + Version: new("2.0"), }, Changed: machine1.Changed, Created: machine1.Created, @@ -164,19 +164,19 @@ var ( Hardware: machine1.Hardware, ID: machine1.ID, Ipmi: &models.V1MachineIPMI{ - Address: pointer.Pointer("1.2.3.4"), - Bmcversion: pointer.Pointer("1.1"), + Address: new("1.2.3.4"), + Bmcversion: new("1.1"), Fru: &models.V1MachineFru{ BoardPartNumber: "part123", ChassisPartSerial: "chassis123", ProductSerial: "product123", }, - LastUpdated: pointer.Pointer(strfmt.DateTime(testTime.Add(-5 * time.Second))), - Mac: pointer.Pointer("1.2.3.4"), + LastUpdated: new(strfmt.DateTime(testTime.Add(-5 * time.Second))), + Mac: new("1.2.3.4"), Powermetric: &models.V1PowerMetric{ - Averageconsumedwatts: pointer.Pointer(float32(16.0)), + Averageconsumedwatts: new(float32(16.0)), }, - Powerstate: pointer.Pointer("ON"), + Powerstate: new("ON"), }, Ledstate: &models.V1ChassisIdentifyLEDState{}, Liveliness: machine1.Liveliness, @@ -190,7 +190,7 @@ var ( ipmiMachine2 = &models.V1MachineIPMIResponse{ Allocation: machine1.Allocation, Bios: &models.V1MachineBIOS{ - Version: pointer.Pointer("2.0"), + Version: new("2.0"), }, Changed: machine1.Changed, Created: machine1.Created, @@ -199,22 +199,22 @@ var ( Hardware: machine1.Hardware, ID: machine1.ID, Ipmi: &models.V1MachineIPMI{ - Address: pointer.Pointer("1.2.3.4"), - Bmcversion: pointer.Pointer("1.1"), + Address: new("1.2.3.4"), + Bmcversion: new("1.1"), Fru: &models.V1MachineFru{ BoardPartNumber: "part123", ChassisPartSerial: "chassis123", ProductSerial: "product123", }, - LastUpdated: pointer.Pointer(strfmt.DateTime(testTime.Add(-5 * time.Second))), - Mac: pointer.Pointer("1.2.3.4"), + LastUpdated: new(strfmt.DateTime(testTime.Add(-5 * time.Second))), + Mac: new("1.2.3.4"), Powermetric: &models.V1PowerMetric{ - Averageconsumedwatts: pointer.Pointer(float32(16.0)), + Averageconsumedwatts: new(float32(16.0)), }, - Powerstate: pointer.Pointer("ON"), + Powerstate: new("ON"), Powersupplies: []*models.V1PowerSupply{ - {Status: &models.V1PowerSupplyStatus{Health: pointer.Pointer("OK")}}, - {Status: &models.V1PowerSupplyStatus{Health: pointer.Pointer("NOT-OK")}}, + {Status: &models.V1PowerSupplyStatus{Health: new("OK")}}, + {Status: &models.V1PowerSupplyStatus{Health: new("NOT-OK")}}, }, }, Ledstate: &models.V1ChassisIdentifyLEDState{}, @@ -228,18 +228,18 @@ var ( } machineIssue1 = &models.V1MachineIssue{ - Description: pointer.Pointer("this is a test issue 1"), - Details: pointer.Pointer("more details 1"), - ID: pointer.Pointer("issue-1-id"), - RefURL: pointer.Pointer("https://url-1"), - Severity: pointer.Pointer("minor"), + Description: new("this is a test issue 1"), + Details: new("more details 1"), + ID: new("issue-1-id"), + RefURL: new("https://url-1"), + Severity: new("minor"), } machineIssue2 = &models.V1MachineIssue{ - Description: pointer.Pointer("this is a test issue 2"), - Details: pointer.Pointer("more details 2"), - ID: pointer.Pointer("issue-2-id"), - RefURL: pointer.Pointer("https://url-2"), - Severity: pointer.Pointer("major"), + Description: new("this is a test issue 2"), + Details: new("more details 2"), + ID: new("issue-2-id"), + RefURL: new("https://url-2"), + Severity: new("major"), } ) @@ -270,22 +270,22 @@ func Test_MachineCmd_MultiResult(t *testing.T) { machine2, machine1, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID LAST EVENT WHEN AGE HOSTNAME PROJECT SIZE IMAGE PARTITION RACK 2 Waiting 1m 1 1 rack-1 1 Phoned Home 7d 14d machine-hostname-1 project-1 1 debian-name 1 rack-1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID LAST EVENT WHEN AGE DESCRIPTION NAME HOSTNAME PROJECT IPS SIZE IMAGE PARTITION RACK STARTED TAGS LOCK / RESERVE 2 Waiting 1m 1 1 rack-1 b 1 Phoned Home 7d 14d machine allocation 1 machine-1 machine-hostname-1 project-1 1.1.1.1 1 debian-name 1 rack-1 2022-05-05T01:02:03Z a `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 2 machine-2 1 machine-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | | LAST EVENT | WHEN | AGE | HOSTNAME | PROJECT | SIZE | IMAGE | PARTITION | RACK | |----|--|-------------|------|-----|--------------------|-----------|------|-------------|-----------|--------| | 2 | | Waiting | 1m | | | | 1 | | 1 | rack-1 | @@ -370,19 +370,19 @@ func Test_MachineCmd_SingleResult(t *testing.T) { }, }, want: machine1, - wantTable: pointer.Pointer(` + wantTable: new(` ID LAST EVENT WHEN AGE HOSTNAME PROJECT SIZE IMAGE PARTITION RACK 1 Phoned Home 7d 14d machine-hostname-1 project-1 1 debian-name 1 rack-1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID LAST EVENT WHEN AGE DESCRIPTION NAME HOSTNAME PROJECT IPS SIZE IMAGE PARTITION RACK STARTED TAGS LOCK / RESERVE 1 Phoned Home 7d 14d machine allocation 1 machine-1 machine-hostname-1 project-1 1.1.1.1 1 debian-name 1 rack-1 2022-05-05T01:02:03Z a `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 machine-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | | LAST EVENT | WHEN | AGE | HOSTNAME | PROJECT | SIZE | IMAGE | PARTITION | RACK | |----|--|-------------|------|-----|--------------------|-----------|------|-------------|-----------|--------| | 1 | | Phoned Home | 7d | 14d | machine-hostname-1 | project-1 | 1 | debian-name | 1 | rack-1 | @@ -508,19 +508,19 @@ func Test_MachineIPMICmd_MultiResult(t *testing.T) { want: []*models.V1MachineIPMIResponse{ ipmiMachine1, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID POWER IP MAC BOARD PART NUMBER BIOS BMC SIZE PARTITION RACK UPDATED 1 ⏻ 16W 1.2.3.4 1.2.3.4 part123 2.0 1.1 1 1 rack-1 5s ago `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID LAST EVENT STATUS POWER IP MAC BOARD PART NUMBER CHASSIS SERIAL PRODUCT SERIAL BIOS VERSION BMC VERSION SIZE PARTITION RACK UPDATED 1 Phoned Home ON 16W 1.2.3.4 1.2.3.4 part123 chassis123 product123 2.0 1.1 1 1 rack-1 5s ago `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 machine-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | | POWER | IP | MAC | BOARD PART NUMBER | BIOS | BMC | SIZE | PARTITION | RACK | UPDATED | |----|--|-------|---------|---------|-------------------|------|-----|------|-----------|--------|---------| | 1 | | ⏻ 16W | 1.2.3.4 | 1.2.3.4 | part123 | 2.0 | 1.1 | 1 | 1 | rack-1 | 5s ago | @@ -549,19 +549,19 @@ ID LAST EVENT STATUS POWER IP MAC BOARD PART NUMBER CHASSIS SE want: []*models.V1MachineIPMIResponse{ ipmiMachine2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID POWER IP MAC BOARD PART NUMBER BIOS BMC SIZE PARTITION RACK UPDATED 1 ⏻ 16W 1.2.3.4 1.2.3.4 part123 2.0 1.1 1 1 rack-1 5s ago `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID LAST EVENT STATUS POWER IP MAC BOARD PART NUMBER CHASSIS SERIAL PRODUCT SERIAL BIOS VERSION BMC VERSION SIZE PARTITION RACK UPDATED 1 Phoned Home ON Power Supply NOT-OK 16W 1.2.3.4 1.2.3.4 part123 chassis123 product123 2.0 1.1 1 1 rack-1 5s ago `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 machine-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | | POWER | IP | MAC | BOARD PART NUMBER | BIOS | BMC | SIZE | PARTITION | RACK | UPDATED | |----|--|-------|---------|---------|-------------------|------|-----|------|-----------|--------|---------| | 1 | | ⏻ 16W | 1.2.3.4 | 1.2.3.4 | part123 | 2.0 | 1.1 | 1 | 1 | rack-1 | 5s ago | @@ -594,22 +594,22 @@ func Test_MachineIssuesListCmd_MultiResult(t *testing.T) { machineIssue2, machineIssue1, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID SEVERITY DESCRIPTION REFERENCE URL issue-2-id major this is a test issue 2 https://url-2 issue-1-id minor this is a test issue 1 https://url-1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID SEVERITY DESCRIPTION REFERENCE URL issue-2-id major this is a test issue 2 https://url-2 issue-1-id minor this is a test issue 1 https://url-1 `), - template: pointer.Pointer("{{ .id }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }}"), + wantTemplate: new(` issue-2-id issue-1-id `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | SEVERITY | DESCRIPTION | REFERENCE URL | |------------|----------|------------------------|---------------| | issue-2-id | major | this is a test issue 2 | https://url-2 | @@ -677,18 +677,18 @@ func Test_MachineIssuesCmd(t *testing.T) { }, }, want: machineWithIssues, - wantTable: pointer.Pointer(` + wantTable: new(` ID POWER ALLOCATED LOCK REASON LAST EVENT WHEN ISSUES 1 ⏻ 16W yes state Phoned Home 7d this is a test issue 1 (issue-1-id) this is a test issue 2 (issue-2-id) `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME PARTITION PROJECT POWER STATE LOCK REASON LAST EVENT WHEN ISSUES REF URL DETAILS 1 machine-1 1 project-1 ON 16W state Phoned Home 7d this is a test issue 1 (issue-1-id) https://url-1 more details 1 this is a test issue 2 (issue-2-id) https://url-2 more details 2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | POWER | ALLOCATED | | LOCK REASON | LAST EVENT | WHEN | ISSUES | |----|-------|-----------|--|-------------|-------------|------|-------------------------------------| | 1 | ⏻ 16W | yes | | state | Phoned Home | 7d | this is a test issue 1 (issue-1-id) | diff --git a/cmd/network.go b/cmd/network.go index 90051a2..8b3fa0a 100644 --- a/cmd/network.go +++ b/cmd/network.go @@ -231,7 +231,7 @@ func (c *networkCmd) Create(rq *models.V1NetworkCreateRequest) (*models.V1Networ } func (c *networkCmd) Update(rq *models.V1NetworkUpdateRequest) (*models.V1NetworkResponse, error) { - resp, err := c.client.Network().UpdateNetwork(network.NewUpdateNetworkParams().WithBody(rq).WithForce(pointer.Pointer(viper.GetBool(forceFlag))), nil) + resp, err := c.client.Network().UpdateNetwork(network.NewUpdateNetworkParams().WithBody(rq).WithForce(new(viper.GetBool(forceFlag))), nil) if err != nil { return nil, err } @@ -301,16 +301,16 @@ func (c *networkCmd) createRequestFromCLI() (*models.V1NetworkCreateRequest, err } return &models.V1NetworkCreateRequest{ - ID: pointer.Pointer(viper.GetString("id")), + ID: new(viper.GetString("id")), Description: viper.GetString("description"), Name: viper.GetString("name"), Partitionid: viper.GetString("partition"), Projectid: viper.GetString("project"), Prefixes: viper.GetStringSlice("prefixes"), Destinationprefixes: viper.GetStringSlice("destination-prefixes"), - Privatesuper: pointer.Pointer(viper.GetBool("privatesuper")), - Nat: pointer.Pointer(viper.GetBool("nat")), - Underlay: pointer.Pointer(viper.GetBool("underlay")), + Privatesuper: new(viper.GetBool("privatesuper")), + Nat: new(viper.GetBool("nat")), + Underlay: new(viper.GetBool("underlay")), Vrf: viper.GetInt64("vrf"), Vrfshared: viper.GetBool("vrfshared"), Labels: lbs, @@ -405,7 +405,7 @@ func (c *networkCmd) updateRequestFromCLI(args []string) (*models.V1NetworkUpdat ur = &models.V1NetworkUpdateRequest{ Description: viper.GetString("description"), Destinationprefixes: nil, - ID: pointer.Pointer(id), + ID: new(id), Labels: labels, Name: viper.GetString("name"), Prefixes: nil, diff --git a/cmd/network_test.go b/cmd/network_test.go index 7a4944f..afa0c16 100644 --- a/cmd/network_test.go +++ b/cmd/network_test.go @@ -10,7 +10,6 @@ import ( "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-go/test/client" "github.com/metal-stack/metal-lib/pkg/genericcli" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" "github.com/spf13/afero" @@ -22,23 +21,23 @@ var ( network1 = &models.V1NetworkResponse{ Description: "network 1", Destinationprefixes: []string{"dest"}, - ID: pointer.Pointer("nw1"), + ID: new("nw1"), Labels: map[string]string{"a": "b"}, Name: "network-1", - Nat: pointer.Pointer(true), + Nat: new(true), Parentnetworkid: "", Partitionid: "partition-1", Prefixes: []string{"prefix"}, - Privatesuper: pointer.Pointer(true), + Privatesuper: new(true), Projectid: "", Shared: false, - Underlay: pointer.Pointer(true), + Underlay: new(true), Consumption: &models.V1NetworkConsumption{ IPV4: &models.V1NetworkUsage{ - AvailableIps: pointer.Pointer(int64(100)), - AvailablePrefixes: pointer.Pointer(int64(200)), - UsedIps: pointer.Pointer(int64(300)), - UsedPrefixes: pointer.Pointer(int64(400)), + AvailableIps: new(int64(100)), + AvailablePrefixes: new(int64(200)), + UsedIps: new(int64(300)), + UsedPrefixes: new(int64(400)), }, }, Vrf: 50, @@ -52,23 +51,23 @@ var ( network1child = &models.V1NetworkResponse{ Description: "child 1", Destinationprefixes: []string{"dest"}, - ID: pointer.Pointer("child1"), + ID: new("child1"), Labels: map[string]string{"e": "f"}, Name: "network-1", - Nat: pointer.Pointer(true), + Nat: new(true), Parentnetworkid: "nw1", Partitionid: "partition-1", Prefixes: []string{"prefix"}, - Privatesuper: pointer.Pointer(false), + Privatesuper: new(false), Projectid: "project-1", Shared: false, - Underlay: pointer.Pointer(false), + Underlay: new(false), Consumption: &models.V1NetworkConsumption{ IPV4: &models.V1NetworkUsage{ - AvailableIps: pointer.Pointer(int64(100)), - AvailablePrefixes: pointer.Pointer(int64(200)), - UsedIps: pointer.Pointer(int64(300)), - UsedPrefixes: pointer.Pointer(int64(400)), + AvailableIps: new(int64(100)), + AvailablePrefixes: new(int64(200)), + UsedIps: new(int64(300)), + UsedPrefixes: new(int64(400)), }, }, Vrf: 50, @@ -78,23 +77,23 @@ var ( network2 = &models.V1NetworkResponse{ Description: "network 2", Destinationprefixes: []string{"dest"}, - ID: pointer.Pointer("nw2"), + ID: new("nw2"), Labels: map[string]string{"c": "d"}, Name: "network-2", - Nat: pointer.Pointer(false), + Nat: new(false), Parentnetworkid: "internet", Partitionid: "partition-1", Prefixes: []string{"prefix"}, - Privatesuper: pointer.Pointer(false), + Privatesuper: new(false), Projectid: "project-1", Shared: false, - Underlay: pointer.Pointer(false), + Underlay: new(false), Consumption: &models.V1NetworkConsumption{ IPV4: &models.V1NetworkUsage{ - AvailableIps: pointer.Pointer(int64(400)), - AvailablePrefixes: pointer.Pointer(int64(300)), - UsedIps: pointer.Pointer(int64(200)), - UsedPrefixes: pointer.Pointer(int64(100)), + AvailableIps: new(int64(400)), + AvailablePrefixes: new(int64(300)), + UsedIps: new(int64(200)), + UsedPrefixes: new(int64(100)), }, }, Vrf: 60, @@ -129,25 +128,25 @@ func Test_NetworkCmd_MultiResult(t *testing.T) { network1, network2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME PROJECT PARTITION NAT SHARED PREFIXES IP USAGE nw1 network-1 partition-1 true false ◕ prefix ◕ └─╴child1 network-1 project-1 partition-1 true false ◕ prefix ◕ nw2 network-2 project-1 partition-1 false false ● prefix ● `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID DESCRIPTION NAME PROJECT PARTITION NAT SHARED PREFIXES PRIVATE SUPER ANNOTATIONS nw1 network 1 network-1 partition-1 true false prefix true a=b └─╴child1 child 1 network-1 project-1 partition-1 true false prefix false e=f nw2 network 2 network-2 project-1 partition-1 false false prefix false c=d `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` child1 network-1 nw1 network-1 nw2 network-2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | PROJECT | PARTITION | NAT | SHARED | | PREFIXES | IP USAGE | |-----------|-----------|-----------|-------------|-------|--------|---|----------|----------| | nw1 | network-1 | | partition-1 | true | false | ◕ | prefix | ◕ | @@ -166,7 +165,7 @@ nw2 network-2 mocks: &client.MetalMockFns{ Network: func(mock *mock.Mock) { mock.On("CreateNetwork", testcommon.MatchIgnoreContext(t, network.NewCreateNetworkParams().WithBody(networkResponseToCreate(network1))), nil).Return(nil, &network.CreateNetworkConflict{}).Once() - mock.On("UpdateNetwork", testcommon.MatchIgnoreContext(t, network.NewUpdateNetworkParams().WithBody(networkResponseToUpdate(network1)).WithForce(pointer.Pointer(false))), nil).Return(&network.UpdateNetworkOK{ + mock.On("UpdateNetwork", testcommon.MatchIgnoreContext(t, network.NewUpdateNetworkParams().WithBody(networkResponseToUpdate(network1)).WithForce(new(false))), nil).Return(&network.UpdateNetworkOK{ Payload: network1, }, nil) mock.On("CreateNetwork", testcommon.MatchIgnoreContext(t, network.NewCreateNetworkParams().WithBody(networkResponseToCreate(network2))), nil).Return(&network.CreateNetworkCreated{ @@ -208,7 +207,7 @@ nw2 network-2 }, mocks: &client.MetalMockFns{ Network: func(mock *mock.Mock) { - mock.On("UpdateNetwork", testcommon.MatchIgnoreContext(t, network.NewUpdateNetworkParams().WithBody(networkResponseToUpdate(network1)).WithForce(pointer.Pointer(false))), nil).Return(&network.UpdateNetworkOK{ + mock.On("UpdateNetwork", testcommon.MatchIgnoreContext(t, network.NewUpdateNetworkParams().WithBody(networkResponseToUpdate(network1)).WithForce(new(false))), nil).Return(&network.UpdateNetworkOK{ Payload: network1, }, nil) }, @@ -257,19 +256,19 @@ func Test_NetworkCmd_SingleResult(t *testing.T) { }, }, want: network1, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME PROJECT PARTITION NAT SHARED PREFIXES IP USAGE nw1 network-1 partition-1 true false ◕ prefix ◕ `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID DESCRIPTION NAME PROJECT PARTITION NAT SHARED PREFIXES PRIVATE SUPER ANNOTATIONS nw1 network 1 network-1 partition-1 true false prefix true a=b `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` nw1 network-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | PROJECT | PARTITION | NAT | SHARED | | PREFIXES | IP USAGE | |-----|-----------|---------|-------------|------|--------|---|----------|----------| | nw1 | network-1 | | partition-1 | true | false | ◕ | prefix | ◕ | @@ -359,7 +358,7 @@ nw1 network-1 Shared: network1.Shared, AdditionalAnnouncableCIDRs: network1.AdditionalAnnouncableCIDRs, Defaultchildprefixlength: network1.Defaultchildprefixlength, - }).WithForce(pointer.Pointer(false))), nil).Return(&network.UpdateNetworkOK{ + }).WithForce(new(false))), nil).Return(&network.UpdateNetworkOK{ Payload: network1, }, nil) }, diff --git a/cmd/partition.go b/cmd/partition.go index 7f64e68..9f01317 100644 --- a/cmd/partition.go +++ b/cmd/partition.go @@ -194,15 +194,15 @@ func (c *partitionCmd) createRequestFromCLI() (*models.V1PartitionCreateRequest, ntpServersArgument := viper.GetStringSlice("ntpservers") for _, s := range dnsServersArgument { - dnsServers = append(dnsServers, &models.V1DNSServer{IP: pointer.Pointer(s)}) + dnsServers = append(dnsServers, &models.V1DNSServer{IP: new(s)}) } for _, s := range ntpServersArgument { - ntpServers = append(ntpServers, &models.V1NTPServer{Address: pointer.Pointer(s)}) + ntpServers = append(ntpServers, &models.V1NTPServer{Address: new(s)}) } pcr := &models.V1PartitionCreateRequest{ - ID: pointer.Pointer(viper.GetString("id")), + ID: new(viper.GetString("id")), Description: viper.GetString("description"), Name: viper.GetString("name"), Mgmtserviceaddress: viper.GetString("mgmtserver"), diff --git a/cmd/partition_test.go b/cmd/partition_test.go index dadda00..58a469a 100644 --- a/cmd/partition_test.go +++ b/cmd/partition_test.go @@ -7,7 +7,6 @@ import ( "github.com/metal-stack/metal-go/api/client/partition" "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-go/test/client" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" "github.com/spf13/afero" @@ -23,7 +22,7 @@ var ( Kernelurl: "kernelurl", }, Description: "partition 1", - ID: pointer.Pointer("1"), + ID: new("1"), Mgmtserviceaddress: "mgmt", Name: "partition-1", Labels: map[string]string{ @@ -37,7 +36,7 @@ var ( Kernelurl: "kernelurl", }, Description: "partition 2", - ID: pointer.Pointer("2"), + ID: new("2"), Mgmtserviceaddress: "mgmt", Name: "partition-2", } @@ -64,22 +63,22 @@ func Test_PartitionCmd_MultiResult(t *testing.T) { partition1, partition2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION 1 partition-1 partition 1 2 partition-2 partition 2 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION LABELS 1 partition-1 partition 1 a=b 2 partition-2 partition 2 `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 partition-1 2 partition-2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | |----|-------------|-------------| | 1 | partition-1 | partition 1 | @@ -188,19 +187,19 @@ func Test_PartitionCmd_SingleResult(t *testing.T) { }, }, want: partition1, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION 1 partition-1 partition 1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION LABELS 1 partition-1 partition 1 a=b `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 partition-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | |----|-------------|-------------| | 1 | partition-1 | partition 1 | @@ -278,7 +277,7 @@ func Test_PartitionCapacityCmd(t *testing.T) { Payload: []*models.V1PartitionCapacity{ { Description: "partition 1", - ID: pointer.Pointer("1"), + ID: new("1"), Name: "partition-1", Servers: []*models.V1ServerCapacity{ { @@ -288,7 +287,7 @@ func Test_PartitionCapacityCmd(t *testing.T) { Free: 3, Other: 4, Othermachines: []string{"def"}, - Size: pointer.Pointer("size-1"), + Size: new("size-1"), Total: 5, Reservations: 3, Usedreservations: 1, @@ -302,7 +301,7 @@ func Test_PartitionCapacityCmd(t *testing.T) { want: []*models.V1PartitionCapacity{ { Description: "partition 1", - ID: pointer.Pointer("1"), + ID: new("1"), Name: "partition-1", Servers: []*models.V1ServerCapacity{ { @@ -312,7 +311,7 @@ func Test_PartitionCapacityCmd(t *testing.T) { Free: 3, Other: 4, Othermachines: []string{"def"}, - Size: pointer.Pointer("size-1"), + Size: new("size-1"), Total: 5, Reservations: 3, Usedreservations: 1, @@ -320,21 +319,21 @@ func Test_PartitionCapacityCmd(t *testing.T) { }, }, }, - wantTable: pointer.Pointer(` + wantTable: new(` PARTITION SIZE ALLOCATED FREE UNAVAILABLE RESERVATIONS | TOTAL | FAULTY 1 size-1 1 3 0 2 (1/3 used) | 5 | 2 Total 1 3 0 2 | 5 | 2 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` PARTITION SIZE ALLOCATED FREE UNAVAILABLE RESERVATIONS | TOTAL | FAULTY PHONED HOME WAITING OTHER 1 size-1 1 3 0 2 (1/3 used) | 5 | 2 0 0 4 Total 1 3 0 2 | 5 | 2 0 0 4 `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 partition-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | PARTITION | SIZE | ALLOCATED | FREE | UNAVAILABLE | RESERVATIONS | TOTAL | FAULTY | |-----------|--------|-----------|------|-------------|--------------|-------|--------| | 1 | size-1 | 1 | 3 | 0 | 2 (1/3 used) | 5 | 2 | @@ -353,12 +352,12 @@ Total 1 3 0 2 | 5 | 2 mock.On("PartitionCapacity", testcommon.MatchIgnoreContext(t, partition.NewPartitionCapacityParams().WithBody(&models.V1PartitionCapacityRequest{ ID: "1", Sizeid: "size-1", - Projectid: pointer.Pointer("123"), + Projectid: new("123"), })), nil).Return(&partition.PartitionCapacityOK{ Payload: []*models.V1PartitionCapacity{ { Description: "partition 1", - ID: pointer.Pointer("1"), + ID: new("1"), Name: "partition-1", Servers: []*models.V1ServerCapacity{ { @@ -368,7 +367,7 @@ Total 1 3 0 2 | 5 | 2 Free: 3, Other: 4, Othermachines: []string{"def"}, - Size: pointer.Pointer("size-1"), + Size: new("size-1"), Total: 5, Reservations: 3, Usedreservations: 1, @@ -382,7 +381,7 @@ Total 1 3 0 2 | 5 | 2 want: []*models.V1PartitionCapacity{ { Description: "partition 1", - ID: pointer.Pointer("1"), + ID: new("1"), Name: "partition-1", Servers: []*models.V1ServerCapacity{ { @@ -392,7 +391,7 @@ Total 1 3 0 2 | 5 | 2 Free: 3, Other: 4, Othermachines: []string{"def"}, - Size: pointer.Pointer("size-1"), + Size: new("size-1"), Total: 5, Reservations: 3, Usedreservations: 1, @@ -400,21 +399,21 @@ Total 1 3 0 2 | 5 | 2 }, }, }, - wantTable: pointer.Pointer(` + wantTable: new(` PARTITION SIZE ALLOCATED FREE UNAVAILABLE RESERVATIONS | TOTAL | FAULTY 1 size-1 1 3 0 2 (1/3 used) | 5 | 2 Total 1 3 0 2 | 5 | 2 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` PARTITION SIZE ALLOCATED FREE UNAVAILABLE RESERVATIONS | TOTAL | FAULTY PHONED HOME WAITING OTHER 1 size-1 1 3 0 2 (1/3 used) | 5 | 2 0 0 4 Total 1 3 0 2 | 5 | 2 0 0 4 `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 partition-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | PARTITION | SIZE | ALLOCATED | FREE | UNAVAILABLE | RESERVATIONS | TOTAL | FAULTY | |-----------|--------|-----------|------|-------------|--------------|-------|--------| | 1 | size-1 | 1 | 3 | 0 | 2 (1/3 used) | 5 | 2 | diff --git a/cmd/project_test.go b/cmd/project_test.go index 6ced9af..f22a89c 100644 --- a/cmd/project_test.go +++ b/cmd/project_test.go @@ -9,7 +9,6 @@ import ( "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-go/test/client" "github.com/metal-stack/metal-lib/pkg/genericcli" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" "github.com/spf13/afero" @@ -90,22 +89,22 @@ func Test_ProjectCmd_MultiResult(t *testing.T) { project1, project2, }, - wantTable: pointer.Pointer(` + wantTable: new(` UID TENANT NAME DESCRIPTION LABELS ANNOTATIONS 1 metal-stack project-1 project 1 c a=b 2 metal-stack project-2 project 2 c a=b `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` UID TENANT NAME DESCRIPTION QUOTAS CLUSTERS / MACHINES / IPS LABELS ANNOTATIONS 1 metal-stack project-1 project 1 1 / 3 / 2 c a=b 2 metal-stack project-2 project 2 ∞ / ∞ / ∞ c a=b `), - template: pointer.Pointer("{{ .meta.id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .meta.id }} {{ .name }}"), + wantTemplate: new(` 1 project-1 2 project-2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | UID | TENANT | NAME | DESCRIPTION | LABELS | ANNOTATIONS | |-----|-------------|-----------|-------------|--------|-------------| | 1 | metal-stack | project-1 | project 1 | c | a=b | @@ -135,19 +134,19 @@ UID TENANT NAME DESCRIPTION QUOTAS CLUSTERS / MACHINES / IPS LABE want: []*models.V1ProjectResponse{ project1, }, - wantTable: pointer.Pointer(` + wantTable: new(` UID TENANT NAME DESCRIPTION LABELS ANNOTATIONS 1 metal-stack project-1 project 1 c a=b `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` UID TENANT NAME DESCRIPTION QUOTAS CLUSTERS / MACHINES / IPS LABELS ANNOTATIONS 1 metal-stack project-1 project 1 1 / 3 / 2 c a=b `), - template: pointer.Pointer("{{ .meta.id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .meta.id }} {{ .name }}"), + wantTemplate: new(` 1 project-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | UID | TENANT | NAME | DESCRIPTION | LABELS | ANNOTATIONS | |-----|-------------|-----------|-------------|--------|-------------| | 1 | metal-stack | project-1 | project 1 | c | a=b | @@ -261,19 +260,19 @@ func Test_ProjectCmd_SingleResult(t *testing.T) { }, }, want: project1, - wantTable: pointer.Pointer(` + wantTable: new(` UID TENANT NAME DESCRIPTION LABELS ANNOTATIONS 1 metal-stack project-1 project 1 c a=b `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` UID TENANT NAME DESCRIPTION QUOTAS CLUSTERS / MACHINES / IPS LABELS ANNOTATIONS 1 metal-stack project-1 project 1 1 / 3 / 2 c a=b `), - template: pointer.Pointer("{{ .meta.id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .meta.id }} {{ .name }}"), + wantTemplate: new(` 1 project-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | UID | TENANT | NAME | DESCRIPTION | LABELS | ANNOTATIONS | |-----|-------------|-----------|-------------|--------|-------------| | 1 | metal-stack | project-1 | project 1 | c | a=b | diff --git a/cmd/root_test.go b/cmd/root_test.go index 577f725..caba4ac 100644 --- a/cmd/root_test.go +++ b/cmd/root_test.go @@ -51,10 +51,10 @@ func Test_BasicRootCmdStuff(t *testing.T) { { name: "overwrite api-url and api-token from config-file", fsMocks: func(fs afero.Fs, want *rest.HealthResponse) { - require.NoError(t, afero.WriteFile(fs, fmt.Sprintf("/etc/%s/config.yaml", binaryName), []byte(fmt.Sprintf(`--- + require.NoError(t, afero.WriteFile(fs, fmt.Sprintf("/etc/%s/config.yaml", binaryName), fmt.Appendf(nil, `--- api-url: "%s" api-token: "i-am-token" -`, ts.URL)), 0755)) +`, ts.URL), 0755)) }, cmd: func(want *rest.HealthResponse) []string { return []string{"health"} @@ -67,10 +67,10 @@ api-token: "i-am-token" { name: "overwrite api-url and api-token from user-given config-file path", fsMocks: func(fs afero.Fs, want *rest.HealthResponse) { - require.NoError(t, afero.WriteFile(fs, "/config.yaml", []byte(fmt.Sprintf(`--- + require.NoError(t, afero.WriteFile(fs, "/config.yaml", fmt.Appendf(nil, `--- api-url: "%s" api-token: "i-am-token" -`, ts.URL)), 0755)) +`, ts.URL), 0755)) }, cmd: func(want *rest.HealthResponse) []string { return []string{"health", "--config", "/config.yaml"} diff --git a/cmd/size.go b/cmd/size.go index 10448f2..1e9ea90 100644 --- a/cmd/size.go +++ b/cmd/size.go @@ -11,7 +11,6 @@ import ( "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-lib/pkg/genericcli" "github.com/metal-stack/metal-lib/pkg/genericcli/printers" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/tag" "github.com/metal-stack/metalctl/cmd/sorters" "github.com/spf13/cobra" @@ -39,14 +38,14 @@ func newSizeCmd(c *config) *cobra.Command { ListPrinter: func() printers.Printer { return c.listPrinter }, CreateRequestFromCLI: func() (*models.V1SizeCreateRequest, error) { return &models.V1SizeCreateRequest{ - ID: pointer.Pointer(viper.GetString("id")), + ID: new(viper.GetString("id")), Name: viper.GetString("name"), Description: viper.GetString("description"), Constraints: []*models.V1SizeConstraint{ { Max: viper.GetInt64("max"), Min: viper.GetInt64("min"), - Type: pointer.Pointer(viper.GetString("type")), + Type: new(viper.GetString("type")), }, }, }, nil diff --git a/cmd/size_reservations_test.go b/cmd/size_reservations_test.go index 28dbab9..ae6ced1 100644 --- a/cmd/size_reservations_test.go +++ b/cmd/size_reservations_test.go @@ -6,7 +6,6 @@ import ( "github.com/metal-stack/metal-go/api/client/size" "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-go/test/client" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" "github.com/spf13/afero" @@ -16,28 +15,28 @@ import ( var ( rv1 = &models.V1SizeReservationResponse{ - Amount: pointer.Pointer(int32(3)), + Amount: new(int32(3)), Description: "this is reservation 1", - ID: pointer.Pointer("r1"), + ID: new("r1"), Labels: map[string]string{ "a": "b", }, Name: "reservation 1", Partitionids: []string{"partition-a", "partition-b"}, - Projectid: pointer.Pointer("project-a"), - Sizeid: pointer.Pointer("size-a"), + Projectid: new("project-a"), + Sizeid: new("size-a"), } rv2 = &models.V1SizeReservationResponse{ - Amount: pointer.Pointer(int32(2)), + Amount: new(int32(2)), Description: "this is reservation 2", - ID: pointer.Pointer("r2"), + ID: new("r2"), Labels: map[string]string{ "b": "c", }, Name: "reservation 2", Partitionids: []string{"partition-b"}, - Projectid: pointer.Pointer("project-b"), - Sizeid: pointer.Pointer("size-b"), + Projectid: new("project-b"), + Sizeid: new("size-b"), } ) @@ -62,22 +61,22 @@ func Test_SizeReservationCmd_MultiResult(t *testing.T) { rv1, rv2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID SIZE PROJECT PARTITIONS DESCRIPTION AMOUNT r1 size-a project-a partition-a, partition-b this is reservation 1 3 r2 size-b project-b partition-b this is reservation 2 2 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID SIZE PROJECT PARTITIONS DESCRIPTION AMOUNT LABELS r1 size-a project-a partition-a, partition-b this is reservation 1 3 a=b r2 size-b project-b partition-b this is reservation 2 2 b=c `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` r1 reservation 1 r2 reservation 2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | SIZE | PROJECT | PARTITIONS | DESCRIPTION | AMOUNT | |----|--------|-----------|--------------------------|-----------------------|--------| | r1 | size-a | project-a | partition-a, partition-b | this is reservation 1 | 3 | @@ -167,19 +166,19 @@ func Test_SizeReservationCmd_SingleResult(t *testing.T) { }, }, want: rv1, - wantTable: pointer.Pointer(` + wantTable: new(` ID SIZE PROJECT PARTITIONS DESCRIPTION AMOUNT r1 size-a project-a partition-a, partition-b this is reservation 1 3 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID SIZE PROJECT PARTITIONS DESCRIPTION AMOUNT LABELS r1 size-a project-a partition-a, partition-b this is reservation 1 3 a=b `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` r1 reservation 1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | SIZE | PROJECT | PARTITIONS | DESCRIPTION | AMOUNT | |----|--------|-----------|--------------------------|-----------------------|--------| | r1 | size-a | project-a | partition-a, partition-b | this is reservation 1 | 3 | diff --git a/cmd/size_test.go b/cmd/size_test.go index a7f30df..2f52d2d 100644 --- a/cmd/size_test.go +++ b/cmd/size_test.go @@ -46,7 +46,7 @@ var ( "size.metal-stack.io/drive-description": "960GB NVMe", }, Description: "size 1", - ID: pointer.Pointer("1"), + ID: new("1"), Name: "size-1", } size2 = &models.V1SizeResponse{ @@ -68,7 +68,7 @@ var ( }, }, Description: "size 2", - ID: pointer.Pointer("2"), + ID: new("2"), Name: "size-2", } ) @@ -94,23 +94,23 @@ func Test_SizeCmd_MultiResult(t *testing.T) { size1, size2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION CPU RANGE MEMORY RANGE STORAGE RANGE GPU RANGE 1 size-1 size 1 5 - 6 3 B - 4 B 1 B - 2 B AD120GL*: 1 - 1 2 size-2 size 2 5 - 6 3 B - 4 B 1 B - 2 B `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION CPU RANGE MEMORY RANGE STORAGE RANGE GPU RANGE LABELS 1 size-1 size 1 5 - 6 3 B - 4 B 1 B - 2 B AD120GL*: 1 - 1 size.metal-stack.io/cpu-description=1x Intel(R) Xeon(R) D-2141I CPU @ 2.20GHz size.metal-stack.io/drive-description=960GB NVMe 2 size-2 size 2 5 - 6 3 B - 4 B 1 B - 2 B `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 size-1 2 size-2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | CPU RANGE | MEMORY RANGE | STORAGE RANGE | GPU RANGE | |----|--------|-------------|-----------|--------------|---------------|-----------------| | 1 | size-1 | size 1 | 5 - 6 | 3 B - 4 B | 1 B - 2 B | AD120GL*: 1 - 1 | @@ -219,20 +219,20 @@ func Test_SizeCmd_SingleResult(t *testing.T) { }, }, want: size1, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION CPU RANGE MEMORY RANGE STORAGE RANGE GPU RANGE 1 size-1 size 1 5 - 6 3 B - 4 B 1 B - 2 B AD120GL*: 1 - 1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION CPU RANGE MEMORY RANGE STORAGE RANGE GPU RANGE LABELS 1 size-1 size 1 5 - 6 3 B - 4 B 1 B - 2 B AD120GL*: 1 - 1 size.metal-stack.io/cpu-description=1x Intel(R) Xeon(R) D-2141I CPU @ 2.20GHz size.metal-stack.io/drive-description=960GB NVMe `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 size-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | CPU RANGE | MEMORY RANGE | STORAGE RANGE | GPU RANGE | |----|--------|-------------|-----------|--------------|---------------|-----------------| | 1 | size-1 | size 1 | 5 - 6 | 3 B - 4 B | 1 B - 2 B | AD120GL*: 1 - 1 | @@ -295,7 +295,7 @@ ID NAME DESCRIPTION CPU RANGE MEMORY RANGE STORAGE RANGE GPU RANGE mocks: &client.MetalMockFns{ Size: func(mock *mock.Mock) { mock.On("Suggest", testcommon.MatchIgnoreContext(t, size.NewSuggestParams().WithBody(&models.V1SizeSuggestRequest{ - MachineID: pointer.Pointer("1"), + MachineID: new("1"), })), nil).Return(&size.SuggestOK{ Payload: []*models.V1SizeConstraint{ { @@ -336,7 +336,7 @@ ID NAME DESCRIPTION CPU RANGE MEMORY RANGE STORAGE RANGE GPU RANGE }, }, Description: "foo", - ID: pointer.Pointer("c1-large-x86"), + ID: new("c1-large-x86"), Name: "mysize", Labels: map[string]string{ "1": "b", diff --git a/cmd/sizeimageconstraint.go b/cmd/sizeimageconstraint.go index c81fc26..d6323de 100644 --- a/cmd/sizeimageconstraint.go +++ b/cmd/sizeimageconstraint.go @@ -8,7 +8,6 @@ import ( "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-lib/pkg/genericcli" "github.com/metal-stack/metal-lib/pkg/genericcli/printers" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metalctl/cmd/sorters" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -130,8 +129,8 @@ func sizeImageConstraintResponseToUpdate(r *models.V1SizeImageConstraintResponse func (c *sizeImageConstraintCmd) try() error { _, err := c.client.Sizeimageconstraint().TrySizeImageConstraint(sizemodel.NewTrySizeImageConstraintParams().WithBody(&models.V1SizeImageConstraintTryRequest{ - Size: pointer.Pointer(viper.GetString("size")), - Image: pointer.Pointer(viper.GetString("image")), + Size: new(viper.GetString("size")), + Image: new(viper.GetString("image")), }), nil) if err != nil { return err diff --git a/cmd/sizeimageconstraint_test.go b/cmd/sizeimageconstraint_test.go index b9c2436..d210cf7 100644 --- a/cmd/sizeimageconstraint_test.go +++ b/cmd/sizeimageconstraint_test.go @@ -6,7 +6,6 @@ import ( "github.com/metal-stack/metal-go/api/client/sizeimageconstraint" "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-go/test/client" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" "github.com/spf13/afero" @@ -22,7 +21,7 @@ var ( }, }, Description: "sic 1", - ID: pointer.Pointer("1"), + ID: new("1"), Name: "sic-1", } sic2 = &models.V1SizeImageConstraintResponse{ @@ -32,7 +31,7 @@ var ( }, }, Description: "sic 2", - ID: pointer.Pointer("2"), + ID: new("2"), Name: "sic-2", } ) @@ -58,22 +57,22 @@ func Test_SizeImageConstraintCmd_MultiResult(t *testing.T) { sic1, sic2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION IMAGE CONSTRAINT 1 sic-1 sic 1 os-image * 2 sic-2 sic 2 os-image * `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION IMAGE CONSTRAINT 1 sic-1 sic 1 os-image * 2 sic-2 sic 2 os-image * `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 sic-1 2 sic-2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | IMAGE | CONSTRAINT | |----|-------|-------------|----------|------------| | 1 | sic-1 | sic 1 | os-image | * | @@ -163,19 +162,19 @@ func Test_SizeImageConstraintCmd_SingleResult(t *testing.T) { }, }, want: sic1, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION IMAGE CONSTRAINT 1 sic-1 sic 1 os-image * `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION IMAGE CONSTRAINT 1 sic-1 sic 1 os-image * `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 sic-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | IMAGE | CONSTRAINT | |----|-------|-------------|----------|------------| | 1 | sic-1 | sic 1 | os-image | * | diff --git a/cmd/ssh.go b/cmd/ssh.go index 7d52c2d..c01b0f9 100644 --- a/cmd/ssh.go +++ b/cmd/ssh.go @@ -9,7 +9,6 @@ import ( "github.com/metal-stack/metal-go/api/client/vpn" "github.com/metal-stack/metal-go/api/models" - "github.com/metal-stack/metal-lib/pkg/pointer" metalssh "github.com/metal-stack/metal-lib/pkg/ssh" metalvpn "github.com/metal-stack/metal-lib/pkg/vpn" "github.com/spf13/viper" @@ -23,7 +22,7 @@ func (c *firewallCmd) firewallSSHViaVPN(firewall *models.V1FirewallResponse) (er _, _ = fmt.Fprintf(c.out, "accessing firewall through vpn ") authKeyResp, err := c.client.VPN().GetVPNAuthKey(vpn.NewGetVPNAuthKeyParams().WithBody(&models.V1VPNRequest{ Pid: projectID, - Ephemeral: pointer.Pointer(true), + Ephemeral: new(true), }), nil) if err != nil { return fmt.Errorf("failed to get VPN auth key: %w", err) diff --git a/cmd/switch.go b/cmd/switch.go index 8c0723b..af331b7 100644 --- a/cmd/switch.go +++ b/cmd/switch.go @@ -11,7 +11,6 @@ import ( "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-lib/pkg/genericcli" "github.com/metal-stack/metal-lib/pkg/genericcli/printers" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metalctl/cmd/sorters" "github.com/metal-stack/metalctl/cmd/tableprinters" "github.com/spf13/cobra" @@ -234,7 +233,7 @@ func (c *switchCmd) List() ([]*models.V1SwitchResponse, error) { } func (c *switchCmd) Delete(id string) (*models.V1SwitchResponse, error) { - resp, err := c.client.SwitchOperations().DeleteSwitch(switch_operations.NewDeleteSwitchParams().WithID(id).WithForce(pointer.Pointer(viper.GetBool("force"))), nil) + resp, err := c.client.SwitchOperations().DeleteSwitch(switch_operations.NewDeleteSwitchParams().WithID(id).WithForce(new(viper.GetBool("force"))), nil) if err != nil { return nil, err } @@ -388,8 +387,8 @@ func (c *switchCmd) switchMigrate(args []string) error { } resp, err := c.client.SwitchOperations().MigrateSwitch(switch_operations.NewMigrateSwitchParams().WithBody(&models.V1SwitchMigrateRequest{ - OldSwitchID: pointer.Pointer(args[0]), - NewSwitchID: pointer.Pointer(args[1]), + OldSwitchID: new(args[0]), + NewSwitchID: new(args[1]), }), nil) if err != nil { return err diff --git a/cmd/switch_test.go b/cmd/switch_test.go index 81b3346..be089cb 100644 --- a/cmd/switch_test.go +++ b/cmd/switch_test.go @@ -29,24 +29,24 @@ var ( Cidrs: []string{"cidr"}, Vnis: []string{"vni"}, }, - Mac: pointer.Pointer("a-mac"), - Name: pointer.Pointer("a-name"), + Mac: new("a-mac"), + Name: new("a-name"), Vrf: "100", - Actual: pointer.Pointer("UP"), + Actual: new("UP"), }, }, }, Description: "switch 1", - ID: pointer.Pointer("1"), + ID: new("1"), LastSync: &models.V1SwitchSync{ Duration: pointer.Pointer(int64(1 * time.Second)), Error: "", - Time: pointer.Pointer(strfmt.DateTime(testTime)), + Time: new(strfmt.DateTime(testTime)), }, LastSyncError: &models.V1SwitchSync{ Duration: pointer.Pointer(int64(2 * time.Second)), Error: "error", - Time: pointer.Pointer(strfmt.DateTime(testTime.Add(-5 * time.Minute))), + Time: new(strfmt.DateTime(testTime.Add(-5 * time.Minute))), }, Mode: "operational", Name: "switch-1", @@ -56,14 +56,14 @@ var ( Cidrs: []string{"cidr"}, Vnis: []string{"vni"}, }, - Mac: pointer.Pointer("a-mac"), - Name: pointer.Pointer("a-name"), + Mac: new("a-mac"), + Name: new("a-name"), Vrf: "100", - Actual: pointer.Pointer("UP"), + Actual: new("UP"), }, }, Partition: partition1, - RackID: pointer.Pointer("rack-1"), + RackID: new("rack-1"), Os: &models.V1SwitchOS{ Vendor: "SONiC", Version: "1", @@ -81,24 +81,24 @@ var ( Cidrs: []string{"cidr"}, Vnis: []string{"vni"}, }, - Mac: pointer.Pointer("a-mac"), - Name: pointer.Pointer("a-name"), + Mac: new("a-mac"), + Name: new("a-name"), Vrf: "100", - Actual: pointer.Pointer("DOWN"), + Actual: new("DOWN"), }, }, }, Description: "switch 2", - ID: pointer.Pointer("2"), + ID: new("2"), LastSync: &models.V1SwitchSync{ Duration: pointer.Pointer(int64(1 * time.Second)), Error: "", - Time: pointer.Pointer(strfmt.DateTime(testTime)), + Time: new(strfmt.DateTime(testTime)), }, LastSyncError: &models.V1SwitchSync{ Duration: pointer.Pointer(int64(2 * time.Second)), Error: "error", - Time: pointer.Pointer(strfmt.DateTime(testTime.Add(-5 * time.Minute))), + Time: new(strfmt.DateTime(testTime.Add(-5 * time.Minute))), }, Mode: "operational", Name: "switch-2", @@ -108,14 +108,14 @@ var ( Cidrs: []string{"cidr"}, Vnis: []string{"vni"}, }, - Mac: pointer.Pointer("a-mac"), - Name: pointer.Pointer("a-name"), + Mac: new("a-mac"), + Name: new("a-name"), Vrf: "100", - Actual: pointer.Pointer("UP"), + Actual: new("UP"), }, }, Partition: partition1, - RackID: pointer.Pointer("rack-1"), + RackID: new("rack-1"), Os: &models.V1SwitchOS{ Vendor: "Cumulus", Version: "2", @@ -144,22 +144,22 @@ func Test_SwitchCmd_MultiResult(t *testing.T) { switch1, switch2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID PARTITION RACK OS STATUS LAST SYNC 1 1 rack-1 🦔 ● 0s ago 2 1 rack-1 🐢 ● 0s ago `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID PARTITION RACK OS METALCORE IP MODE LAST SYNC SYNC DURATION LAST ERROR 1 1 rack-1 SONiC (1) 1.2.3 1.2.3.4 operational 0s ago 1s 5m ago: error 2 1 rack-1 Cumulus (2) operational 0s ago 1s 5m ago: error `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 switch-1 2 switch-2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | PARTITION | RACK | OS | STATUS | LAST SYNC | |----|-----------|--------|----|--------|-----------| | 1 | 1 | rack-1 | 🦔 | ● | 0s ago | @@ -192,19 +192,19 @@ ID PARTITION RACK OS METALCORE IP MODE LAST SYNC want: []*models.V1SwitchResponse{ switch1, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID PARTITION RACK OS STATUS LAST SYNC 1 1 rack-1 🦔 ● 0s ago `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID PARTITION RACK OS METALCORE IP MODE LAST SYNC SYNC DURATION LAST ERROR 1 1 rack-1 SONiC (1) 1.2.3 1.2.3.4 operational 0s ago 1s 5m ago: error `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 switch-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | PARTITION | RACK | OS | STATUS | LAST SYNC | |----|-----------|--------|----|--------|-----------| | 1 | 1 | rack-1 | 🦔 | ● | 0s ago | @@ -239,7 +239,7 @@ ID PARTITION RACK OS METALCORE IP MODE LAST SYNC SY }, mocks: &client.MetalMockFns{ SwitchOperations: func(mock *mock.Mock) { - mock.On("DeleteSwitch", testcommon.MatchIgnoreContext(t, switch_operations.NewDeleteSwitchParams().WithID(*switch1.ID).WithForce(pointer.Pointer(false))), nil).Return(&switch_operations.DeleteSwitchOK{ + mock.On("DeleteSwitch", testcommon.MatchIgnoreContext(t, switch_operations.NewDeleteSwitchParams().WithID(*switch1.ID).WithForce(new(false))), nil).Return(&switch_operations.DeleteSwitchOK{ Payload: switch1, }, nil) }, @@ -266,16 +266,16 @@ func Test_SwitchCmd_ConnectedMachinesResult(t *testing.T) { mock.On("FindIPMIMachines", testcommon.MatchIgnoreContext(t, machine.NewFindIPMIMachinesParams().WithBody(&models.V1MachineFindRequest{})), nil).Return(&machine.FindIPMIMachinesOK{ Payload: []*models.V1MachineIPMIResponse{ { - ID: pointer.Pointer("machine-1"), + ID: new("machine-1"), Rackid: "rack-1", Allocation: &models.V1MachineAllocation{ - Hostname: pointer.Pointer("alloc-1"), + Hostname: new("alloc-1"), }, Partition: &models.V1PartitionResponse{ - ID: pointer.Pointer("1"), + ID: new("1"), }, Size: &models.V1SizeResponse{ - ID: pointer.Pointer("n1-medium-x86"), + ID: new("n1-medium-x86"), }, Ipmi: &models.V1MachineIPMI{ Fru: &models.V1MachineFru{ @@ -303,16 +303,16 @@ func Test_SwitchCmd_ConnectedMachinesResult(t *testing.T) { }, MS: map[string]*models.V1MachineIPMIResponse{ "machine-1": { - ID: pointer.Pointer("machine-1"), + ID: new("machine-1"), Rackid: "rack-1", Allocation: &models.V1MachineAllocation{ - Hostname: pointer.Pointer("alloc-1"), + Hostname: new("alloc-1"), }, Partition: &models.V1PartitionResponse{ - ID: pointer.Pointer("1"), + ID: new("1"), }, Size: &models.V1SizeResponse{ - ID: pointer.Pointer("n1-medium-x86"), + ID: new("n1-medium-x86"), }, Ipmi: &models.V1MachineIPMI{ Fru: &models.V1MachineFru{ @@ -323,22 +323,22 @@ func Test_SwitchCmd_ConnectedMachinesResult(t *testing.T) { }, }, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID NIC NAME IDENTIFIER PARTITION RACK SIZE PRODUCT SERIAL CHASSIS SERIAL 1 1 rack-1 └─╴machine-1 a-name a-mac 1 rack-1 n1-medium-x86 123 456 2 1 rack-1 └─╴machine-1 a-name (DOWN) a-mac 1 rack-1 n1-medium-x86 123 456 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NIC NAME IDENTIFIER PARTITION RACK SIZE HOSTNAME PRODUCT SERIAL CHASSIS SERIAL 1 1 rack-1 └─╴machine-1 ❓ a-name a-mac 1 rack-1 n1-medium-x86 alloc-1 123 456 2 1 rack-1 └─╴machine-1 ❓ a-name (DOWN) a-mac 1 rack-1 n1-medium-x86 alloc-1 123 456 `), - template: pointer.Pointer(`{{ $machines := .machines }}{{ range .switches }}{{ $switch := . }}{{ range .connections }}{{ $switch.id }},{{ $switch.rack_id }},{{ .nic.name }},{{ .machine_id }},{{ (index $machines .machine_id).ipmi.fru.product_serial }}{{ printf "\n" }}{{ end }}{{ end }}`), - wantTemplate: pointer.Pointer(` + template: new(`{{ $machines := .machines }}{{ range .switches }}{{ $switch := . }}{{ range .connections }}{{ $switch.id }},{{ $switch.rack_id }},{{ .nic.name }},{{ .machine_id }},{{ (index $machines .machine_id).ipmi.fru.product_serial }}{{ printf "\n" }}{{ end }}{{ end }}`), + wantTemplate: new(` 1,rack-1,a-name,machine-1,123 2,rack-1,a-name,machine-1,123 `), @@ -364,19 +364,19 @@ func Test_SwitchCmd_SingleResult(t *testing.T) { }, }, want: switch1, - wantTable: pointer.Pointer(` + wantTable: new(` ID PARTITION RACK OS STATUS LAST SYNC 1 1 rack-1 🦔 ● 0s ago `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID PARTITION RACK OS METALCORE IP MODE LAST SYNC SYNC DURATION LAST ERROR 1 1 rack-1 SONiC (1) 1.2.3 1.2.3.4 operational 0s ago 1s 5m ago: error `), - template: pointer.Pointer("{{ .id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .id }} {{ .name }}"), + wantTemplate: new(` 1 switch-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | PARTITION | RACK | OS | STATUS | LAST SYNC | |----|-----------|--------|----|--------|-----------| | 1 | 1 | rack-1 | 🦔 | ● | 0s ago | @@ -389,7 +389,7 @@ ID PARTITION RACK OS METALCORE IP MODE LAST SYNC SY }, mocks: &client.MetalMockFns{ SwitchOperations: func(mock *mock.Mock) { - mock.On("DeleteSwitch", testcommon.MatchIgnoreContext(t, switch_operations.NewDeleteSwitchParams().WithID(*switch1.ID).WithForce(pointer.Pointer(false))), nil).Return(&switch_operations.DeleteSwitchOK{ + mock.On("DeleteSwitch", testcommon.MatchIgnoreContext(t, switch_operations.NewDeleteSwitchParams().WithID(*switch1.ID).WithForce(new(false))), nil).Return(&switch_operations.DeleteSwitchOK{ Payload: switch1, }, nil) }, @@ -426,7 +426,7 @@ func Test_SwitchCmd_ToggleResult(t *testing.T) { var sw1Down models.V1SwitchResponse err = json.Unmarshal(data, &sw1Down) require.NoError(t, err) - sw1Down.Nics[0].Actual = pointer.Pointer("DOWN") + sw1Down.Nics[0].Actual = new("DOWN") tests := []*test[currentSwitchPortStateDump]{ { @@ -460,7 +460,7 @@ func Test_SwitchCmd_ToggleResult(t *testing.T) { WithID(*switch1.ID). WithBody(&models.V1SwitchPortToggleRequest{ Nic: switch1.Nics[0].Name, - Status: pointer.Pointer("DOWN"), + Status: new("DOWN"), })), nil).Return(&switch_operations.ToggleSwitchPortOK{ Payload: &sw1Down, }, nil) diff --git a/cmd/tableprinters/switch_test.go b/cmd/tableprinters/switch_test.go index de79d3f..d755e82 100644 --- a/cmd/tableprinters/switch_test.go +++ b/cmd/tableprinters/switch_test.go @@ -6,7 +6,6 @@ import ( "github.com/google/go-cmp/cmp" "github.com/metal-stack/metal-go/api/models" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" ) @@ -19,64 +18,64 @@ func Test_switchInterfaceNameLessFunc(t *testing.T) { { name: "sorts interface names for cumulus-like interface names", conns: []*models.V1SwitchConnection{ - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp10")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s4")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s3")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s1")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s2")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp9")}}, + {Nic: &models.V1SwitchNic{Name: new("swp10")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s4")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s3")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s1")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s2")}}, + {Nic: &models.V1SwitchNic{Name: new("swp9")}}, }, want: []*models.V1SwitchConnection{ - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s1")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s2")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s3")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s4")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp9")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp10")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s1")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s2")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s3")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s4")}}, + {Nic: &models.V1SwitchNic{Name: new("swp9")}}, + {Nic: &models.V1SwitchNic{Name: new("swp10")}}, }, }, { name: "sorts interface names for sonic-like interface names", conns: []*models.V1SwitchConnection{ - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet3")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet49")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet10")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet2")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet1")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet11")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet3")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet49")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet10")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet2")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet1")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet11")}}, }, want: []*models.V1SwitchConnection{ - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet1")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet2")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet3")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet10")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet11")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet49")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet1")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet2")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet3")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet10")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet11")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet49")}}, }, }, { name: "sorts interface names edge cases", conns: []*models.V1SwitchConnection{ - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("123")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet1")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s4w5")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("foo")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s3w3")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet100")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s4w6")}}, + {Nic: &models.V1SwitchNic{Name: new("123")}}, + {Nic: &models.V1SwitchNic{Name: new("")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet1")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s4w5")}}, + {Nic: &models.V1SwitchNic{Name: new("foo")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s3w3")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet100")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s4w6")}}, {Nic: &models.V1SwitchNic{Name: nil}}, }, want: []*models.V1SwitchConnection{ - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s3w3")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s4w5")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("swp1s4w6")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet1")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("Ethernet100")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s3w3")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s4w5")}}, + {Nic: &models.V1SwitchNic{Name: new("swp1s4w6")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet1")}}, + {Nic: &models.V1SwitchNic{Name: new("Ethernet100")}}, + {Nic: &models.V1SwitchNic{Name: new("")}}, {Nic: &models.V1SwitchNic{Name: nil}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("123")}}, - {Nic: &models.V1SwitchNic{Name: pointer.Pointer("foo")}}, + {Nic: &models.V1SwitchNic{Name: new("123")}}, + {Nic: &models.V1SwitchNic{Name: new("foo")}}, }, }, } diff --git a/cmd/tenant_test.go b/cmd/tenant_test.go index 912b3e8..1bf598a 100644 --- a/cmd/tenant_test.go +++ b/cmd/tenant_test.go @@ -9,7 +9,6 @@ import ( "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-go/test/client" "github.com/metal-stack/metal-lib/pkg/genericcli" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" "github.com/spf13/afero" @@ -88,12 +87,12 @@ func Test_TenantCmd_MultiResult(t *testing.T) { tenant1, tenant2, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION 1 tenant-1 tenant 1 2 tenant-2 tenant 2 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION LABELS ANNOTATIONS QUOTAS 1 tenant-1 tenant 1 c a=b 1 Cluster(s) 3 Machine(s) @@ -102,12 +101,12 @@ ID NAME DESCRIPTION LABELS ANNOTATIONS QUOTAS ∞ Machine(s) ∞ IP(s) `), - template: pointer.Pointer("{{ .meta.id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .meta.id }} {{ .name }}"), + wantTemplate: new(` 1 tenant-1 2 tenant-2 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | |----|----------|-------------| | 1 | tenant-1 | tenant 1 | @@ -139,21 +138,21 @@ ID NAME DESCRIPTION LABELS ANNOTATIONS QUOTAS want: []*models.V1TenantResponse{ tenant1, }, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION 1 tenant-1 tenant 1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION LABELS ANNOTATIONS QUOTAS 1 tenant-1 tenant 1 c a=b 1 Cluster(s) 3 Machine(s) 2 IP(s) `), - template: pointer.Pointer("{{ .meta.id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .meta.id }} {{ .name }}"), + wantTemplate: new(` 1 tenant-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | |----|----------|-------------| | 1 | tenant-1 | tenant 1 | @@ -267,21 +266,21 @@ func Test_TenantCmd_SingleResult(t *testing.T) { }, }, want: tenant1, - wantTable: pointer.Pointer(` + wantTable: new(` ID NAME DESCRIPTION 1 tenant-1 tenant 1 `), - wantWideTable: pointer.Pointer(` + wantWideTable: new(` ID NAME DESCRIPTION LABELS ANNOTATIONS QUOTAS 1 tenant-1 tenant 1 c a=b 1 Cluster(s) 3 Machine(s) 2 IP(s) `), - template: pointer.Pointer("{{ .meta.id }} {{ .name }}"), - wantTemplate: pointer.Pointer(` + template: new("{{ .meta.id }} {{ .name }}"), + wantTemplate: new(` 1 tenant-1 `), - wantMarkdown: pointer.Pointer(` + wantMarkdown: new(` | ID | NAME | DESCRIPTION | |----|----------|-------------| | 1 | tenant-1 | tenant 1 | diff --git a/cmd/update.go b/cmd/update.go index 24963b2..7704303 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -5,7 +5,6 @@ import ( "github.com/spf13/viper" "github.com/metal-stack/metal-go/api/client/version" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/updater" ) @@ -44,7 +43,7 @@ func newUpdateCmd(c *config) *cobra.Command { } if viper.IsSet("version") && viper.GetString("version") != "latest" { - desired = pointer.Pointer(viper.GetString("version")) + desired = new(viper.GetString("version")) } u, err := updater.New("metal-stack", binaryName, binaryName, desired) diff --git a/cmd/version_test.go b/cmd/version_test.go index 034491f..1f27f3c 100644 --- a/cmd/version_test.go +++ b/cmd/version_test.go @@ -7,7 +7,6 @@ import ( "github.com/metal-stack/metal-go/api/client/version" "github.com/metal-stack/metal-go/api/models" "github.com/metal-stack/metal-go/test/client" - "github.com/metal-stack/metal-lib/pkg/pointer" "github.com/metal-stack/metal-lib/pkg/testcommon" "github.com/metal-stack/metalctl/pkg/api" "github.com/metal-stack/v" @@ -25,7 +24,7 @@ func Test_VersionCmd(t *testing.T) { Version: func(mock *mock.Mock) { mock.On("Info", testcommon.MatchIgnoreContext(t, version.NewInfoParams()), nil).Return(&version.InfoOK{ Payload: &models.RestVersion{ - Version: pointer.Pointer("server v1.0.0"), + Version: new("server v1.0.0"), }, }, nil) }, @@ -33,7 +32,7 @@ func Test_VersionCmd(t *testing.T) { want: &api.Version{ Client: "client v1.0.0, " + runtime.Version(), Server: &models.RestVersion{ - Version: pointer.Pointer("server v1.0.0"), + Version: new("server v1.0.0"), }, }, }, diff --git a/cmd/vpn.go b/cmd/vpn.go index a3141a1..918529c 100644 --- a/cmd/vpn.go +++ b/cmd/vpn.go @@ -43,9 +43,9 @@ func (c *config) vpnAuthKeyCreate() error { resp, err := c.client.VPN().GetVPNAuthKey( vpn.NewGetVPNAuthKeyParams().WithBody( &models.V1VPNRequest{ - Pid: pointer.Pointer(viper.GetString("project")), + Pid: new(viper.GetString("project")), Ephemeral: pointer.PointerOrNil(viper.GetBool("ephemeral")), - Reason: pointer.Pointer(viper.GetString("reason")), + Reason: new(viper.GetString("reason")), }), nil, ) if err != nil { diff --git a/go.mod b/go.mod index 684c7f1..7cf6950 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,13 @@ module github.com/metal-stack/metalctl -go 1.25 +go 1.26 require ( github.com/Masterminds/semver/v3 v3.4.0 github.com/dustin/go-humanize v1.0.1 github.com/fatih/color v1.18.0 - github.com/go-openapi/runtime v0.28.0 - github.com/go-openapi/strfmt v0.23.0 + github.com/go-openapi/runtime v0.29.2 + github.com/go-openapi/strfmt v0.25.0 github.com/google/go-cmp v0.7.0 github.com/google/uuid v1.6.0 github.com/metal-stack/metal-go v0.43.0 @@ -21,7 +21,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/undefinedlabs/go-mpatch v1.0.7 gopkg.in/yaml.v3 v3.0.1 - k8s.io/apimachinery v0.34.0 + k8s.io/apimachinery v0.34.2 ) require ( @@ -29,62 +29,47 @@ require ( github.com/VividCortex/ewma v1.2.0 // indirect github.com/akutz/memconn v0.1.0 // indirect github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect - github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/avast/retry-go/v4 v4.6.1 // indirect - github.com/aws/aws-sdk-go-v2 v1.24.1 // indirect - github.com/aws/aws-sdk-go-v2/config v1.26.5 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.16.16 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 // indirect - github.com/aws/aws-sdk-go-v2/service/ssm v1.44.7 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 // indirect - github.com/aws/smithy-go v1.19.0 // indirect - github.com/bits-and-blooms/bitset v1.13.0 // indirect + github.com/avast/retry-go/v4 v4.7.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cheggaaa/pb/v3 v3.1.5 // indirect + github.com/clipperhouse/displaywidth v0.6.2 // indirect + github.com/clipperhouse/stringish v0.1.1 // indirect + github.com/clipperhouse/uax29/v2 v2.3.0 // indirect github.com/coder/websocket v1.8.12 // indirect - github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6 // indirect - github.com/coreos/go-oidc/v3 v3.14.1 // indirect + github.com/coreos/go-oidc/v3 v3.17.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dblohm7/wingoes v0.0.0-20240801171404-fc12d7c70140 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect - github.com/digitalocean/go-smbios v0.0.0-20180907143718-390a4f403a8e // indirect github.com/emicklei/go-restful-openapi/v2 v2.11.0 // indirect github.com/emicklei/go-restful/v3 v3.13.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.9.0 // indirect - github.com/gaissmai/bart v0.11.1 // indirect - github.com/go-jose/go-jose/v4 v4.1.2 // indirect - github.com/go-json-experiment/json v0.0.0-20231102232822-2e55bd4e08b0 // indirect + github.com/gaissmai/bart v0.18.0 // indirect + github.com/go-jose/go-jose/v4 v4.1.3 // indirect + github.com/go-json-experiment/json v0.0.0-20251027170946-4849db3c2f7e // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-openapi/analysis v0.23.0 // indirect - github.com/go-openapi/errors v0.22.2 // indirect - github.com/go-openapi/jsonpointer v0.22.0 // indirect - github.com/go-openapi/jsonreference v0.21.1 // indirect - github.com/go-openapi/loads v0.22.0 // indirect - github.com/go-openapi/spec v0.21.0 // indirect + github.com/go-openapi/analysis v0.24.1 // indirect + github.com/go-openapi/errors v0.22.4 // indirect + github.com/go-openapi/jsonpointer v0.22.1 // indirect + github.com/go-openapi/jsonreference v0.21.3 // indirect + github.com/go-openapi/loads v0.23.2 // indirect + github.com/go-openapi/spec v0.22.1 // indirect github.com/go-openapi/swag v0.24.1 // indirect github.com/go-openapi/swag/cmdutils v0.24.0 // indirect - github.com/go-openapi/swag/conv v0.24.0 // indirect - github.com/go-openapi/swag/fileutils v0.24.0 // indirect - github.com/go-openapi/swag/jsonname v0.24.0 // indirect - github.com/go-openapi/swag/jsonutils v0.24.0 // indirect - github.com/go-openapi/swag/loading v0.24.0 // indirect - github.com/go-openapi/swag/mangling v0.24.0 // indirect + github.com/go-openapi/swag/conv v0.25.4 // indirect + github.com/go-openapi/swag/fileutils v0.25.4 // indirect + github.com/go-openapi/swag/jsonname v0.25.4 // indirect + github.com/go-openapi/swag/jsonutils v0.25.4 // indirect + github.com/go-openapi/swag/loading v0.25.4 // indirect + github.com/go-openapi/swag/mangling v0.25.4 // indirect github.com/go-openapi/swag/netutils v0.24.0 // indirect - github.com/go-openapi/swag/stringutils v0.24.0 // indirect - github.com/go-openapi/swag/typeutils v0.24.0 // indirect - github.com/go-openapi/swag/yamlutils v0.24.0 // indirect - github.com/go-openapi/validate v0.24.0 // indirect + github.com/go-openapi/swag/stringutils v0.25.4 // indirect + github.com/go-openapi/swag/typeutils v0.25.4 // indirect + github.com/go-openapi/swag/yamlutils v0.25.4 // indirect + github.com/go-openapi/validate v0.25.1 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/goccy/go-json v0.10.5 // indirect @@ -96,95 +81,76 @@ require ( github.com/google/go-github/v56 v56.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/nftables v0.3.0 // indirect - github.com/gorilla/csrf v1.7.3 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/securecookie v1.1.2 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect github.com/icza/dyno v0.0.0-20230330125955-09f820a8d9c0 // indirect - github.com/illarion/gonotify/v2 v2.0.3 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/insomniacslk/dhcp v0.0.0-20240227161007-c728f5dd21c8 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/josharian/intern v1.0.0 // indirect - github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 // indirect github.com/jsimonetti/rtnetlink v1.4.2 // indirect github.com/klauspost/compress v1.18.0 // indirect - github.com/kortschak/wol v0.0.0-20200729010619-da482cc4850a // indirect - github.com/lestrrat-go/blackmagic v1.0.3 // indirect + github.com/lestrrat-go/blackmagic v1.0.4 // indirect github.com/lestrrat-go/httpcc v1.0.1 // indirect - github.com/lestrrat-go/httprc v1.0.6 // indirect - github.com/lestrrat-go/iter v1.0.2 // indirect - github.com/lestrrat-go/jwx/v2 v2.1.5 // indirect + github.com/lestrrat-go/httprc/v3 v3.0.1 // indirect + github.com/lestrrat-go/jwx/v3 v3.0.12 // indirect github.com/lestrrat-go/option v1.0.1 // indirect - github.com/mailru/easyjson v0.9.0 // indirect + github.com/lestrrat-go/option/v2 v2.0.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect - github.com/mdlayher/genetlink v1.3.2 // indirect - github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42 // indirect - github.com/mdlayher/sdnotify v1.0.0 // indirect + github.com/mattn/go-runewidth v0.0.19 // indirect + github.com/mdlayher/netlink v1.8.0 // indirect github.com/mdlayher/socket v0.5.1 // indirect - github.com/metal-stack/security v0.9.4 // indirect - github.com/miekg/dns v1.1.64 // indirect + github.com/metal-stack/security v0.9.5 // indirect + github.com/miekg/dns v1.1.72 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/oklog/ulid v1.3.1 // indirect + github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect github.com/olekukonko/errors v1.1.0 // indirect - github.com/olekukonko/ll v0.0.9 // indirect - github.com/olekukonko/tablewriter v1.0.8 // indirect - github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/olekukonko/ll v0.1.5 // indirect + github.com/olekukonko/tablewriter v1.1.3 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus-community/pro-bing v0.6.1 // indirect - github.com/rivo/uniseg v0.4.7 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/safchain/ethtool v0.5.10 // indirect github.com/sagikazarmark/locafero v0.11.0 // indirect - github.com/segmentio/asm v1.2.0 // indirect + github.com/segmentio/asm v1.2.1 // indirect github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect github.com/spf13/cast v1.10.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/tailscale/certstore v0.1.1-0.20231202035212-d3fa0460f47e // indirect github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 // indirect - github.com/tailscale/golang-x-crypto v0.0.0-20240604161659-3fde5e568aa4 // indirect github.com/tailscale/goupnp v1.0.1-0.20210804011211-c64d0f06ea05 // indirect github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a // indirect - github.com/tailscale/netlink v1.1.1-0.20240822203006-4d49adab4de7 // indirect - github.com/tailscale/peercred v0.0.0-20240214030740-b535050b2aa4 // indirect - github.com/tailscale/web-client-prebuilt v0.0.0-20240226180453-5db17b287bf1 // indirect - github.com/tailscale/wireguard-go v0.0.0-20240905161824-799c1978fafc // indirect - github.com/tcnksm/go-httpstat v0.2.0 // indirect - github.com/u-root/uio v0.0.0-20240118234441-a3c409a6018e // indirect - github.com/vishvananda/netns v0.0.5 // indirect + github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect + github.com/tailscale/web-client-prebuilt v0.0.0-20250124233751-d4cd19a26976 // indirect + github.com/tailscale/wireguard-go v0.0.0-20250716170648-1d0488a3d7da // indirect github.com/x448/float16 v0.8.4 // indirect - go.mongodb.org/mongo-driver v1.17.3 // indirect - go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/otel v1.35.0 // indirect - go.opentelemetry.io/otel/metric v1.35.0 // indirect - go.opentelemetry.io/otel/trace v1.35.0 // indirect + go.mongodb.org/mongo-driver v1.17.6 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect go4.org/mem v0.0.0-20240501181205-ae6ca9944745 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect - golang.org/x/crypto v0.41.0 // indirect - golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b // indirect - golang.org/x/mod v0.27.0 // indirect - golang.org/x/net v0.43.0 // indirect - golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/sync v0.16.0 // indirect - golang.org/x/sys v0.35.0 // indirect - golang.org/x/term v0.34.0 // indirect - golang.org/x/text v0.28.0 // indirect - golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.36.0 // indirect + golang.org/x/crypto v0.48.0 // indirect + golang.org/x/exp v0.0.0-20260211191109-2735e65f0518 // indirect + golang.org/x/net v0.50.0 // indirect + golang.org/x/oauth2 v0.35.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.41.0 // indirect + golang.org/x/term v0.40.0 // indirect + golang.org/x/text v0.34.0 // indirect + golang.org/x/time v0.14.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect golang.zx2c4.com/wireguard/windows v0.5.3 // indirect - google.golang.org/protobuf v1.36.8 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gvisor.dev/gvisor v0.0.0-20240722211153-64c016c92987 // indirect - sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect + gvisor.dev/gvisor v0.0.0-20250205023644-9414b50a5633 // indirect + sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect sigs.k8s.io/yaml v1.6.0 // indirect - tailscale.com v1.74.1 // indirect + tailscale.com v1.90.6 // indirect ) diff --git a/go.sum b/go.sum index d82487a..4b713e9 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +9fans.net/go v0.0.8-0.20250307142834-96bdba94b63f h1:1C7nZuxUMNz7eiQALRfiqNOm04+m3edWlRff/BYHf0Q= +9fans.net/go v0.0.8-0.20250307142834-96bdba94b63f/go.mod h1:hHyrZRryGqVdqrknjq5OWDLGCTJ2NeEvtrpR96mjraM= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= filippo.io/mkcert v1.4.4 h1:8eVbbwfVlaqUM7OwuftKc2nuYOoTDQWqsoXmzoXZdbc= @@ -14,54 +16,60 @@ github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7V github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= -github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/avast/retry-go/v4 v4.6.1 h1:VkOLRubHdisGrHnTu89g08aQEWEgRU7LVEop3GbIcMk= -github.com/avast/retry-go/v4 v4.6.1/go.mod h1:V6oF8njAwxJ5gRo1Q7Cxab24xs5NCWZBeaHHBklR8mA= -github.com/aws/aws-sdk-go-v2 v1.24.1 h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU= -github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= -github.com/aws/aws-sdk-go-v2/config v1.26.5 h1:lodGSevz7d+kkFJodfauThRxK9mdJbyutUxGq1NNhvw= -github.com/aws/aws-sdk-go-v2/config v1.26.5/go.mod h1:DxHrz6diQJOc9EwDslVRh84VjjrE17g+pVZXUeSxaDU= -github.com/aws/aws-sdk-go-v2/credentials v1.16.16 h1:8q6Rliyv0aUFAVtzaldUEcS+T5gbadPbWdV1WcAddK8= -github.com/aws/aws-sdk-go-v2/credentials v1.16.16/go.mod h1:UHVZrdUsv63hPXFo1H7c5fEneoVo9UXiz36QG1GEPi0= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 h1:c5I5iH+DZcH3xOIMlz3/tCKJDaHFwYEmxvlh2fAcFo8= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11/go.mod h1:cRrYDYAMUohBJUtUnOhydaMHtiK/1NZ0Otc9lIb6O0Y= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 h1:vF+Zgd9s+H4vOXd5BMaPWykta2a6Ih0AKLq/X6NYKn4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 h1:nYPe006ktcqUji8S2mqXf9c/7NdiKriOwMvWQHgYztw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 h1:GrSw8s0Gs/5zZ0SX+gX4zQjRnRsMJDJ2sLur1gRBhEM= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 h1:DBYTXwIGQSGs9w4jKm60F5dmCQ3EEruxdc0MFh+3EY4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10/go.mod h1:wohMUQiFdzo0NtxbBg0mSRGZ4vL3n0dKjLTINdcIino= +github.com/avast/retry-go/v4 v4.7.0 h1:yjDs35SlGvKwRNSykujfjdMxMhMQQM0TnIjJaHB+Zio= +github.com/avast/retry-go/v4 v4.7.0/go.mod h1:ZMPDa3sY2bKgpLtap9JRUgk2yTAba7cgiFhqxY2Sg6Q= +github.com/aws/aws-sdk-go-v2 v1.36.0 h1:b1wM5CcE65Ujwn565qcwgtOTT1aT4ADOHHgglKjG7fk= +github.com/aws/aws-sdk-go-v2 v1.36.0/go.mod h1:5PMILGVKiW32oDzjj6RU52yrNrDPUHcbZQYr1sM7qmM= +github.com/aws/aws-sdk-go-v2/config v1.29.5 h1:4lS2IB+wwkj5J43Tq/AwvnscBerBJtQQ6YS7puzCI1k= +github.com/aws/aws-sdk-go-v2/config v1.29.5/go.mod h1:SNzldMlDVbN6nWxM7XsUiNXPSa1LWlqiXtvh/1PrJGg= +github.com/aws/aws-sdk-go-v2/credentials v1.17.58 h1:/d7FUpAPU8Lf2KUdjniQvfNdlMID0Sd9pS23FJ3SS9Y= +github.com/aws/aws-sdk-go-v2/credentials v1.17.58/go.mod h1:aVYW33Ow10CyMQGFgC0ptMRIqJWvJ4nxZb0sUiuQT/A= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.27 h1:7lOW8NUwE9UZekS1DYoiPdVAqZ6A+LheHWb+mHbNOq8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.27/go.mod h1:w1BASFIPOPUae7AgaH4SbjNbfdkxuggLyGfNFTn8ITY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.31 h1:lWm9ucLSRFiI4dQQafLrEOmEDGry3Swrz0BIRdiHJqQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.31/go.mod h1:Huu6GG0YTfbPphQkDSo4dEGmQRTKb9k9G7RdtyQWxuI= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.31 h1:ACxDklUKKXb48+eg5ROZXi1vDgfMyfIA/WyvqHcHI0o= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.31/go.mod h1:yadnfsDwqXeVaohbGc/RaD287PuyRw2wugkh5ZL2J6k= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 h1:Pg9URiobXy85kgFev3og2CuOZ8JZUBENF+dcgWBaYNk= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 h1:D4oz8/CzT9bAEYtVhSBmFj2dNOtaHOtMKc2vHBwYizA= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2/go.mod h1:Za3IHqTQ+yNcRHxu1OFucBh0ACZT4j4VQFF0BqpZcLY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.12 h1:O+8vD2rGjfihBewr5bT+QUfYUHIxCVgG61LHoT59shM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.12/go.mod h1:usVdWJaosa66NMvmCrr08NcWDBRv4E6+YFG2pUdw1Lk= github.com/aws/aws-sdk-go-v2/service/ssm v1.44.7 h1:a8HvP/+ew3tKwSXqL3BCSjiuicr+XTU2eFYeogV9GJE= github.com/aws/aws-sdk-go-v2/service/ssm v1.44.7/go.mod h1:Q7XIWsMo0JcMpI/6TGD6XXcXcV1DbTj6e9BKNntIMIM= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 h1:eajuO3nykDPdYicLlP3AGgOyVN3MOlFmZv7WGTuJPow= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.7/go.mod h1:+mJNDdF+qiUlNKNC3fxn74WWNN+sOiGOEImje+3ScPM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 h1:QPMJf+Jw8E1l7zqhZmMlFw6w1NmfkfiSK8mS4zOx3BA= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7/go.mod h1:ykf3COxYI0UJmxcfcxcVuz7b6uADi1FkiUz6Eb7AgM8= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 h1:NzO4Vrau795RkUdSHKEwiR01FaGzGOH1EETJ+5QHnm0= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.7/go.mod h1:6h2YuIoxaMSCFf5fi1EgZAwdfkGMgDY+DVfa61uLe4U= -github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= -github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= -github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= -github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.14 h1:c5WJ3iHz7rLIgArznb3JCSQT3uUMiz9DLZhIX+1G8ok= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.14/go.mod h1:+JJQTxB6N4niArC14YNtxcQtwEqzS3o9Z32n7q33Rfs= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.13 h1:f1L/JtUkVODD+k1+IiSJUUv8A++2qVr+Xvb3xWXETMU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.13/go.mod h1:tvqlFoja8/s0o+UruA1Nrezo/df0PzdunMDDurUfg6U= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.13 h1:3LXNnmtH3TURctC23hnC0p/39Q5gre3FI7BNOiDcVWc= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.13/go.mod h1:7Yn+p66q/jt38qMoVfNvjbm3D89mGBnkwDcijgtih8w= +github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ= +github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb/v3 v3.1.5 h1:QuuUzeM2WsAqG2gMqtzaWithDJv0i+i6UlnwSCI4QLk= github.com/cheggaaa/pb/v3 v3.1.5/go.mod h1:CrxkeghYTXi1lQBEI7jSn+3svI3cuc19haAj6jM60XI= github.com/cilium/ebpf v0.15.0 h1:7NxJhNiBT3NG8pZJ3c+yfrVdHY8ScgKD27sScgjLMMk= github.com/cilium/ebpf v0.15.0/go.mod h1:DHp1WyrLeiBh19Cf/tfiSMhqheEiK8fXFZ4No0P1Hso= +github.com/clipperhouse/displaywidth v0.6.2 h1:ZDpTkFfpHOKte4RG5O/BOyf3ysnvFswpyYrV7z2uAKo= +github.com/clipperhouse/displaywidth v0.6.2/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o= +github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= +github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= +github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= +github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6 h1:8h5+bWd7R6AYUslN6c6iuZWTKsKxUFDlpnmilO6R2n0= github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= -github.com/coreos/go-oidc/v3 v3.14.1 h1:9ePWwfdwC4QKRlCXsJGou56adA/owXczOzwKdOumLqk= -github.com/coreos/go-oidc/v3 v3.14.1/go.mod h1:HaZ3szPaZ0e4r6ebqvsLWlk2Tn+aejfmrfah6hnSYEU= +github.com/coreos/go-oidc/v3 v3.17.0 h1:hWBGaQfbi0iVviX4ibC7bk8OKT5qNr4klBaCHVNvehc= +github.com/coreos/go-oidc/v3 v3.17.0/go.mod h1:wqPbKFrVnE90vty060SB40FCJ8fTHTxSwyXJqZH+sI8= github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/creachadair/taskgroup v0.13.2 h1:3KyqakBuFsm3KkXi/9XIb0QcA8tEzLHLgaoidf0MdVc= +github.com/creachadair/taskgroup v0.13.2/go.mod h1:i3V1Zx7H8RjwljUEeUWYT30Lmb9poewSb2XI1yTwD0g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.23 h1:4M6+isWdcStXEf15G/RbrMPOQj1dZ7HPZCGwE4kOeP0= github.com/creack/pty v1.1.23/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= @@ -77,8 +85,6 @@ github.com/digitalocean/go-smbios v0.0.0-20180907143718-390a4f403a8e h1:vUmf0yez github.com/digitalocean/go-smbios v0.0.0-20180907143718-390a4f403a8e/go.mod h1:YTIHhz/QFSYnu/EhlF2SpU2Uk+32abacUYA5ZPljz1A= github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0= -github.com/dsnet/try v0.0.3 h1:ptR59SsrcFUYbT/FhAbKTV6iLkeD6O18qfIWRml2fqI= -github.com/dsnet/try v0.0.3/go.mod h1:WBM8tRpUmnXXhY1U6/S8dt6UWdHTQ7y8A5YSkRCkq40= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/emicklei/go-restful-openapi/v2 v2.11.0 h1:Ur+yGxoOH/7KRmcj/UoMFqC3VeNc9VOe+/XidumxTvk= @@ -94,14 +100,14 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= -github.com/gaissmai/bart v0.11.1 h1:5Uv5XwsaFBRo4E5VBcb9TzY8B7zxFf+U7isDxqOrRfc= -github.com/gaissmai/bart v0.11.1/go.mod h1:KHeYECXQiBjTzQz/om2tqn3sZF1J7hw9m6z41ftj3fg= +github.com/gaissmai/bart v0.18.0 h1:jQLBT/RduJu0pv/tLwXE+xKPgtWJejbxuXAR+wLJafo= +github.com/gaissmai/bart v0.18.0/go.mod h1:JJzMAhNF5Rjo4SF4jWBrANuJfqY+FvsFhW7t1UZJ+XY= github.com/github/fakeca v0.1.0 h1:Km/MVOFvclqxPM9dZBC4+QE564nU4gz4iZ0D9pMw28I= github.com/github/fakeca v0.1.0/go.mod h1:+bormgoGMMuamOscx7N91aOuUST7wdaJ2rNjeohylyo= -github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI= -github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo= -github.com/go-json-experiment/json v0.0.0-20231102232822-2e55bd4e08b0 h1:ymLjT4f35nQbASLnvxEde4XOBL+Sn7rFuV+FOJqkljg= -github.com/go-json-experiment/json v0.0.0-20231102232822-2e55bd4e08b0/go.mod h1:6daplAwHHGbUGib4990V3Il26O0OC4aRyvewaaAihaA= +github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= +github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-json-experiment/json v0.0.0-20251027170946-4849db3c2f7e h1:Lf/gRkoycfOBPa42vU2bbgPurFong6zXeFtPoxholzU= +github.com/go-json-experiment/json v0.0.0-20251027170946-4849db3c2f7e/go.mod h1:uNVvRXArCGbZ508SxYYTC5v1JWoz2voff5pm25jU1Ok= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -109,58 +115,66 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU= -github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= -github.com/go-openapi/errors v0.22.2 h1:rdxhzcBUazEcGccKqbY1Y7NS8FDcMyIRr0934jrYnZg= -github.com/go-openapi/errors v0.22.2/go.mod h1:+n/5UdIqdVnLIJ6Q9Se8HNGUXYaY6CN8ImWzfi/Gzp0= +github.com/go-openapi/analysis v0.24.1 h1:Xp+7Yn/KOnVWYG8d+hPksOYnCYImE3TieBa7rBOesYM= +github.com/go-openapi/analysis v0.24.1/go.mod h1:dU+qxX7QGU1rl7IYhBC8bIfmWQdX4Buoea4TGtxXY84= +github.com/go-openapi/errors v0.22.4 h1:oi2K9mHTOb5DPW2Zjdzs/NIvwi2N3fARKaTJLdNabaM= +github.com/go-openapi/errors v0.22.4/go.mod h1:z9S8ASTUqx7+CP1Q8dD8ewGH/1JWFFLX/2PmAYNQLgk= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.22.0 h1:TmMhghgNef9YXxTu1tOopo+0BGEytxA+okbry0HjZsM= -github.com/go-openapi/jsonpointer v0.22.0/go.mod h1:xt3jV88UtExdIkkL7NloURjRQjbeUgcxFblMjq2iaiU= +github.com/go-openapi/jsonpointer v0.22.1 h1:sHYI1He3b9NqJ4wXLoJDKmUmHkWy/L7rtEo92JUxBNk= +github.com/go-openapi/jsonpointer v0.22.1/go.mod h1:pQT9OsLkfz1yWoMgYFy4x3U5GY5nUlsOn1qSBH5MkCM= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/jsonreference v0.21.1 h1:bSKrcl8819zKiOgxkbVNRUBIr6Wwj9KYrDbMjRs0cDA= -github.com/go-openapi/jsonreference v0.21.1/go.mod h1:PWs8rO4xxTUqKGu+lEvvCxD5k2X7QYkKAepJyCmSTT8= -github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco= -github.com/go-openapi/loads v0.22.0/go.mod h1:yLsaTCS92mnSAZX5WWoxszLj0u+Ojl+Zs5Stn1oF+rs= -github.com/go-openapi/runtime v0.28.0 h1:gpPPmWSNGo214l6n8hzdXYhPuJcGtziTOgUpvsFWGIQ= -github.com/go-openapi/runtime v0.28.0/go.mod h1:QN7OzcS+XuYmkQLw05akXk0jRH/eZ3kb18+1KwW9gyc= +github.com/go-openapi/jsonreference v0.21.3 h1:96Dn+MRPa0nYAR8DR1E03SblB5FJvh7W6krPI0Z7qMc= +github.com/go-openapi/jsonreference v0.21.3/go.mod h1:RqkUP0MrLf37HqxZxrIAtTWW4ZJIK1VzduhXYBEeGc4= +github.com/go-openapi/loads v0.23.2 h1:rJXAcP7g1+lWyBHC7iTY+WAF0rprtM+pm8Jxv1uQJp4= +github.com/go-openapi/loads v0.23.2/go.mod h1:IEVw1GfRt/P2Pplkelxzj9BYFajiWOtY2nHZNj4UnWY= +github.com/go-openapi/runtime v0.29.2 h1:UmwSGWNmWQqKm1c2MGgXVpC2FTGwPDQeUsBMufc5Yj0= +github.com/go-openapi/runtime v0.29.2/go.mod h1:biq5kJXRJKBJxTDJXAa00DOTa/anflQPhT0/wmjuy+0= github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= -github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= -github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= -github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= -github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= +github.com/go-openapi/spec v0.22.1 h1:beZMa5AVQzRspNjvhe5aG1/XyBSMeX1eEOs7dMoXh/k= +github.com/go-openapi/spec v0.22.1/go.mod h1:c7aeIQT175dVowfp7FeCvXXnjN/MrpaONStibD2WtDA= +github.com/go-openapi/strfmt v0.25.0 h1:7R0RX7mbKLa9EYCTHRcCuIPcaqlyQiWNPTXwClK0saQ= +github.com/go-openapi/strfmt v0.25.0/go.mod h1:nNXct7OzbwrMY9+5tLX4I21pzcmE6ccMGXl3jFdPfn8= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.24.1 h1:DPdYTZKo6AQCRqzwr/kGkxJzHhpKxZ9i/oX0zag+MF8= github.com/go-openapi/swag v0.24.1/go.mod h1:sm8I3lCPlspsBBwUm1t5oZeWZS0s7m/A+Psg0ooRU0A= github.com/go-openapi/swag/cmdutils v0.24.0 h1:KlRCffHwXFI6E5MV9n8o8zBRElpY4uK4yWyAMWETo9I= github.com/go-openapi/swag/cmdutils v0.24.0/go.mod h1:uxib2FAeQMByyHomTlsP8h1TtPd54Msu2ZDU/H5Vuf8= -github.com/go-openapi/swag/conv v0.24.0 h1:ejB9+7yogkWly6pnruRX45D1/6J+ZxRu92YFivx54ik= -github.com/go-openapi/swag/conv v0.24.0/go.mod h1:jbn140mZd7EW2g8a8Y5bwm8/Wy1slLySQQ0ND6DPc2c= -github.com/go-openapi/swag/fileutils v0.24.0 h1:U9pCpqp4RUytnD689Ek/N1d2N/a//XCeqoH508H5oak= -github.com/go-openapi/swag/fileutils v0.24.0/go.mod h1:3SCrCSBHyP1/N+3oErQ1gP+OX1GV2QYFSnrTbzwli90= -github.com/go-openapi/swag/jsonname v0.24.0 h1:2wKS9bgRV/xB8c62Qg16w4AUiIrqqiniJFtZGi3dg5k= -github.com/go-openapi/swag/jsonname v0.24.0/go.mod h1:GXqrPzGJe611P7LG4QB9JKPtUZ7flE4DOVechNaDd7Q= -github.com/go-openapi/swag/jsonutils v0.24.0 h1:F1vE1q4pg1xtO3HTyJYRmEuJ4jmIp2iZ30bzW5XgZts= -github.com/go-openapi/swag/jsonutils v0.24.0/go.mod h1:vBowZtF5Z4DDApIoxcIVfR8v0l9oq5PpYRUuteVu6f0= -github.com/go-openapi/swag/loading v0.24.0 h1:ln/fWTwJp2Zkj5DdaX4JPiddFC5CHQpvaBKycOlceYc= -github.com/go-openapi/swag/loading v0.24.0/go.mod h1:gShCN4woKZYIxPxbfbyHgjXAhO61m88tmjy0lp/LkJk= -github.com/go-openapi/swag/mangling v0.24.0 h1:PGOQpViCOUroIeak/Uj/sjGAq9LADS3mOyjznmHy2pk= -github.com/go-openapi/swag/mangling v0.24.0/go.mod h1:Jm5Go9LHkycsz0wfoaBDkdc4CkpuSnIEf62brzyCbhc= +github.com/go-openapi/swag/conv v0.25.4 h1:/Dd7p0LZXczgUcC/Ikm1+YqVzkEeCc9LnOWjfkpkfe4= +github.com/go-openapi/swag/conv v0.25.4/go.mod h1:3LXfie/lwoAv0NHoEuY1hjoFAYkvlqI/Bn5EQDD3PPU= +github.com/go-openapi/swag/fileutils v0.25.4 h1:2oI0XNW5y6UWZTC7vAxC8hmsK/tOkWXHJQH4lKjqw+Y= +github.com/go-openapi/swag/fileutils v0.25.4/go.mod h1:cdOT/PKbwcysVQ9Tpr0q20lQKH7MGhOEb6EwmHOirUk= +github.com/go-openapi/swag/jsonname v0.25.4 h1:bZH0+MsS03MbnwBXYhuTttMOqk+5KcQ9869Vye1bNHI= +github.com/go-openapi/swag/jsonname v0.25.4/go.mod h1:GPVEk9CWVhNvWhZgrnvRA6utbAltopbKwDu8mXNUMag= +github.com/go-openapi/swag/jsonutils v0.25.4 h1:VSchfbGhD4UTf4vCdR2F4TLBdLwHyUDTd1/q4i+jGZA= +github.com/go-openapi/swag/jsonutils v0.25.4/go.mod h1:7OYGXpvVFPn4PpaSdPHJBtF0iGnbEaTk8AvBkoWnaAY= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.4 h1:IACsSvBhiNJwlDix7wq39SS2Fh7lUOCJRmx/4SN4sVo= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.4/go.mod h1:Mt0Ost9l3cUzVv4OEZG+WSeoHwjWLnarzMePNDAOBiM= +github.com/go-openapi/swag/loading v0.25.4 h1:jN4MvLj0X6yhCDduRsxDDw1aHe+ZWoLjW+9ZQWIKn2s= +github.com/go-openapi/swag/loading v0.25.4/go.mod h1:rpUM1ZiyEP9+mNLIQUdMiD7dCETXvkkC30z53i+ftTE= +github.com/go-openapi/swag/mangling v0.25.4 h1:2b9kBJk9JvPgxr36V23FxJLdwBrpijI26Bx5JH4Hp48= +github.com/go-openapi/swag/mangling v0.25.4/go.mod h1:6dxwu6QyORHpIIApsdZgb6wBk/DPU15MdyYj/ikn0Hg= github.com/go-openapi/swag/netutils v0.24.0 h1:Bz02HRjYv8046Ycg/w80q3g9QCWeIqTvlyOjQPDjD8w= github.com/go-openapi/swag/netutils v0.24.0/go.mod h1:WRgiHcYTnx+IqfMCtu0hy9oOaPR0HnPbmArSRN1SkZM= -github.com/go-openapi/swag/stringutils v0.24.0 h1:i4Z/Jawf9EvXOLUbT97O0HbPUja18VdBxeadyAqS1FM= -github.com/go-openapi/swag/stringutils v0.24.0/go.mod h1:5nUXB4xA0kw2df5PRipZDslPJgJut+NjL7D25zPZ/4w= -github.com/go-openapi/swag/typeutils v0.24.0 h1:d3szEGzGDf4L2y1gYOSSLeK6h46F+zibnEas2Jm/wIw= -github.com/go-openapi/swag/typeutils v0.24.0/go.mod h1:q8C3Kmk/vh2VhpCLaoR2MVWOGP8y7Jc8l82qCTd1DYI= -github.com/go-openapi/swag/yamlutils v0.24.0 h1:bhw4894A7Iw6ne+639hsBNRHg9iZg/ISrOVr+sJGp4c= -github.com/go-openapi/swag/yamlutils v0.24.0/go.mod h1:DpKv5aYuaGm/sULePoeiG8uwMpZSfReo1HR3Ik0yaG8= -github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58= -github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ= +github.com/go-openapi/swag/stringutils v0.25.4 h1:O6dU1Rd8bej4HPA3/CLPciNBBDwZj9HiEpdVsb8B5A8= +github.com/go-openapi/swag/stringutils v0.25.4/go.mod h1:GTsRvhJW5xM5gkgiFe0fV3PUlFm0dr8vki6/VSRaZK0= +github.com/go-openapi/swag/typeutils v0.25.4 h1:1/fbZOUN472NTc39zpa+YGHn3jzHWhv42wAJSN91wRw= +github.com/go-openapi/swag/typeutils v0.25.4/go.mod h1:Ou7g//Wx8tTLS9vG0UmzfCsjZjKhpjxayRKTHXf2pTE= +github.com/go-openapi/swag/yamlutils v0.25.4 h1:6jdaeSItEUb7ioS9lFoCZ65Cne1/RZtPBZ9A56h92Sw= +github.com/go-openapi/swag/yamlutils v0.25.4/go.mod h1:MNzq1ulQu+yd8Kl7wPOut/YHAAU/H6hL91fF+E2RFwc= +github.com/go-openapi/testify/enable/yaml/v2 v2.0.2 h1:0+Y41Pz1NkbTHz8NngxTuAXxEodtNSI1WG1c/m5Akw4= +github.com/go-openapi/testify/enable/yaml/v2 v2.0.2/go.mod h1:kme83333GCtJQHXQ8UKX3IBZu6z8T5Dvy5+CW3NLUUg= +github.com/go-openapi/testify/v2 v2.0.2 h1:X999g3jeLcoY8qctY/c/Z8iBHTbwLz7R2WXd6Ub6wls= +github.com/go-openapi/testify/v2 v2.0.2/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54= +github.com/go-openapi/validate v0.25.1 h1:sSACUI6Jcnbo5IWqbYHgjibrhhmt3vR6lCzKZnmAgBw= +github.com/go-openapi/validate v0.25.1/go.mod h1:RMVyVFYte0gbSTaZ0N4KmTn6u/kClvAFp+mAVfS/DQc= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go4org/plan9netshell v0.0.0-20250324183649-788daa080737 h1:cf60tHxREO3g1nroKr2osU3JWZsJzkfi7rEg+oAB0Lo= +github.com/go4org/plan9netshell v0.0.0-20250324183649-788daa080737/go.mod h1:MIS0jDzbU/vuM9MC4YnBITCv+RYuTRq8dJzmCrFsK9g= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/goccy/go-yaml v1.16.0 h1:d7m1G7A0t+logajVtklHfDYJs2Et9g3gHwdBNNFou0w= @@ -180,25 +194,22 @@ github.com/google/go-github/v56 v56.0.0 h1:TysL7dMa/r7wsQi44BjqlwaHvwlFlqkK8CtBW github.com/google/go-github/v56 v56.0.0/go.mod h1:D8cdcX98YWJvi7TLo7zM4/h8ZTx6u6fwGEkCdisopo0= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/go-tpm v0.9.4 h1:awZRf9FwOeTunQmHoDYSHJps3ie6f1UlhS1fOdPEt1I= +github.com/google/go-tpm v0.9.4/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/nftables v0.3.0 h1:bkyZ0cbpVeMHXOrtlFc8ISmfVqq5gPJukoYieyVmITg= github.com/google/nftables v0.3.0/go.mod h1:BCp9FsrbF1Fn/Yu6CLUc9GGZFw/+hsxfluNXXmxBfRM= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/csrf v1.7.3 h1:BHWt6FTLZAb2HtWT5KDBf6qgpZzvtbp9QWDRKZMXJC0= -github.com/gorilla/csrf v1.7.3/go.mod h1:F1Fj3KG23WYHE6gozCmBAezKookxbIvUJT+121wTuLk= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= -github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU= github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/icza/dyno v0.0.0-20230330125955-09f820a8d9c0 h1:nHoRIX8iXob3Y2kdt9KsjyIb7iApSvb3vgsd93xb5Ow= github.com/icza/dyno v0.0.0-20230330125955-09f820a8d9c0/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= -github.com/illarion/gonotify/v2 v2.0.3 h1:B6+SKPo/0Sw8cRJh1aLzNEeNVFfzE3c6N+o+vyxM+9A= -github.com/illarion/gonotify/v2 v2.0.3/go.mod h1:38oIJTgFqupkEydkkClkbL6i5lXV/bxdH9do5TALPEE= +github.com/illarion/gonotify v1.0.1 h1:F1d+0Fgbq/sDWjj/r66ekjDG+IDeecQKUFH4wNwsoio= +github.com/illarion/gonotify/v3 v3.0.2 h1:O7S6vcopHexutmpObkeWsnzMJt/r1hONIEogeVNmJMk= +github.com/illarion/gonotify/v3 v3.0.2/go.mod h1:HWGPdPe817GfvY3w7cx6zkbzNZfi3QjcBm/wgVvEL1U= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/insomniacslk/dhcp v0.0.0-20240227161007-c728f5dd21c8 h1:V3plQrMHRWOB5zMm3yNqvBxDQVW1+/wHBSok5uPdmVs= @@ -207,13 +218,7 @@ github.com/jellydator/ttlcache/v3 v3.1.0 h1:0gPFG0IHHP6xyUyXq+JaD8fwkDCqgqwohXNJ github.com/jellydator/ttlcache/v3 v3.1.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= -github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 h1:elKwZS1OcdQ0WwEDBeqxKwb7WB62QX8bvZ/FJnVXIfk= -github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86/go.mod h1:aFAMtuldEgx/4q7iSGazk22+IcgvtiC+HIimFO9XlS8= github.com/jsimonetti/rtnetlink v1.4.2 h1:Df9w9TZ3npHTyDn0Ev9e1uzmN2odmXd0QX+J5GTEn90= github.com/jsimonetti/rtnetlink v1.4.2/go.mod h1:92s6LJdE+1iOrw+F2/RO7LYI2Qd8pPpFNNUYW06gcoM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= @@ -230,33 +235,35 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lestrrat-go/blackmagic v1.0.3 h1:94HXkVLxkZO9vJI/w2u1T0DAoprShFd13xtnSINtDWs= -github.com/lestrrat-go/blackmagic v1.0.3/go.mod h1:6AWFyKNNj0zEXQYfTMPfZrAXUWUfTIZ5ECEUEJaijtw= +github.com/lestrrat-go/blackmagic v1.0.4 h1:IwQibdnf8l2KoO+qC3uT4OaTWsW7tuRQXy9TRN9QanA= +github.com/lestrrat-go/blackmagic v1.0.4/go.mod h1:6AWFyKNNj0zEXQYfTMPfZrAXUWUfTIZ5ECEUEJaijtw= +github.com/lestrrat-go/dsig v1.0.0 h1:OE09s2r9Z81kxzJYRn07TFM9XA4akrUdoMwr0L8xj38= +github.com/lestrrat-go/dsig v1.0.0/go.mod h1:dEgoOYYEJvW6XGbLasr8TFcAxoWrKlbQvmJgCR0qkDo= +github.com/lestrrat-go/dsig-secp256k1 v1.0.0 h1:JpDe4Aybfl0soBvoVwjqDbp+9S1Y2OM7gcrVVMFPOzY= +github.com/lestrrat-go/dsig-secp256k1 v1.0.0/go.mod h1:CxUgAhssb8FToqbL8NjSPoGQlnO4w3LG1P0qPWQm/NU= github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE= github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= -github.com/lestrrat-go/httprc v1.0.6 h1:qgmgIRhpvBqexMJjA/PmwSvhNk679oqD1RbovdCGW8k= -github.com/lestrrat-go/httprc v1.0.6/go.mod h1:mwwz3JMTPBjHUkkDv/IGJ39aALInZLrhBp0X7KGUZlo= -github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI= -github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4= -github.com/lestrrat-go/jwx/v2 v2.1.5 h1:PQI5gzadLfJ22ckLrejPVX6eGXKM4M4eGi5fW2jjA3o= -github.com/lestrrat-go/jwx/v2 v2.1.5/go.mod h1:Y722kU5r/8mV7fYDifjug0r8FK8mZdw0K0GpJw/l8pU= +github.com/lestrrat-go/httprc/v3 v3.0.1 h1:3n7Es68YYGZb2Jf+k//llA4FTZMl3yCwIjFIk4ubevI= +github.com/lestrrat-go/httprc/v3 v3.0.1/go.mod h1:2uAvmbXE4Xq8kAUjVrZOq1tZVYYYs5iP62Cmtru00xk= +github.com/lestrrat-go/jwx/v3 v3.0.12 h1:p25r68Y4KrbBdYjIsQweYxq794CtGCzcrc5dGzJIRjg= +github.com/lestrrat-go/jwx/v3 v3.0.12/go.mod h1:HiUSaNmMLXgZ08OmGBaPVvoZQgJVOQphSrGr5zMamS8= github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= +github.com/lestrrat-go/option/v2 v2.0.0 h1:XxrcaJESE1fokHy3FpaQ/cXW8ZsIdWcdFzzLOcID3Ss= +github.com/lestrrat-go/option/v2 v2.0.0/go.mod h1:oSySsmzMoR0iRzCDCaUfsCzxQHUEuhOViQObyy7S6Vg= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= -github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= +github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mdlayher/genetlink v1.3.2 h1:KdrNKe+CTu+IbZnm/GVUMXSqBBLqcGpRDa0xkQy56gw= github.com/mdlayher/genetlink v1.3.2/go.mod h1:tcC3pkCrPUGIKKsCsp0B3AdaaKuHtaxoJRz3cc+528o= -github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42 h1:A1Cq6Ysb0GM0tpKMbdCXCIfBclan4oHk1Jb+Hrejirg= -github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42/go.mod h1:BB4YCPDOzfy7FniQ/lxuYQ3dgmM2cZumHbK8RpTjN2o= +github.com/mdlayher/netlink v1.8.0 h1:e7XNIYJKD7hUct3Px04RuIGJbBxy1/c4nX7D5YyvvlM= +github.com/mdlayher/netlink v1.8.0/go.mod h1:UhgKXUlDQhzb09DrCl2GuRNEglHmhYoWAHid9HK3594= github.com/mdlayher/sdnotify v1.0.0 h1:Ma9XeLVN/l0qpyx1tNeMSeTjCPH6NtuD6/N9XdTlQ3c= github.com/mdlayher/sdnotify v1.0.0/go.mod h1:HQUmpM4XgYkhDLtd+Uad8ZFK1T9D5+pNxnXQjCeJlGE= github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos= @@ -265,36 +272,35 @@ github.com/metal-stack/metal-go v0.43.0 h1:uODD0YCwnAYzyvFxWNakZrymBoMz1FAvP5hkh github.com/metal-stack/metal-go v0.43.0/go.mod h1:GSfXrAj55LGsUSMHWGDsmq5n056NG0yb1JM8bgfvKOw= github.com/metal-stack/metal-lib v0.23.5 h1:ozrkB3DNr3Cqn8nkBvmzc/KKpYqC1j1mv2OVOj8i7Ac= github.com/metal-stack/metal-lib v0.23.5/go.mod h1:7uyHIrE19dkLwCZyeh2jmd7IEq5pEpzrzUGLoMN1eqY= -github.com/metal-stack/security v0.9.4 h1:qgB4Yx48Wgi57a/ePWE1gdUn4RjilVySQAFRVIoPKBU= -github.com/metal-stack/security v0.9.4/go.mod h1:Qya3sKnaZ+1VmayGcMGgCBsVhzBvWYYx9hcvinfXB1Q= +github.com/metal-stack/security v0.9.5 h1:dWJP1hJxvQhdyyrmKqYxsi5sZ5Wbxa66OZBiArT2z0k= +github.com/metal-stack/security v0.9.5/go.mod h1:2++bUdpPbx4d7faiEUiowelT4E65U79Kcw3UOHbuw4k= github.com/metal-stack/updater v1.3.1 h1:Xdx0khlo6zG9vA5o3L++t6eiqzW4730IppneQXHQTwc= github.com/metal-stack/updater v1.3.1/go.mod h1:wOEkiY2AanXELi8zNocmUADt2eW0Ph3KpB31iqrjucs= github.com/metal-stack/v v1.0.3 h1:Sh2oBlnxrCUD+mVpzfC8HiqL045YWkxs0gpTvkjppqs= github.com/metal-stack/v v1.0.3/go.mod h1:YTahEu7/ishwpYKnp/VaW/7nf8+PInogkfGwLcGPdXg= -github.com/miekg/dns v1.1.64 h1:wuZgD9wwCE6XMT05UU/mlSko71eRSXEAm2EbjQXLKnQ= -github.com/miekg/dns v1.1.64/go.mod h1:Dzw9769uoKVaLuODMDZz9M6ynFU6Em65csPuoi8G0ck= +github.com/miekg/dns v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI= +github.com/miekg/dns v1.1.72/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 h1:zrbMGy9YXpIeTnGj4EljqMiZsIcE09mmF8XsD5AYOJc= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0= github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= -github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI= -github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= -github.com/olekukonko/tablewriter v1.0.8 h1:f6wJzHg4QUtJdvrVPKco4QTrAylgaU0+b9br/lJxEiQ= -github.com/olekukonko/tablewriter v1.0.8/go.mod h1:H428M+HzoUXC6JU2Abj9IT9ooRmdq9CxuDmKMtrOCMs= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/olekukonko/ll v0.1.5 h1:J+MNlbt5suwHSEcp0TGMb67FxWuh5L52RUzBCnb8igQ= +github.com/olekukonko/ll v0.1.5/go.mod h1:NVUmjBb/aCtUpjKk75BhWrOlARz3dqsM+OtszpY4o88= +github.com/olekukonko/tablewriter v1.1.3 h1:VSHhghXxrP0JHl+0NnKid7WoEmd9/urKRJLysb70nnA= +github.com/olekukonko/tablewriter v1.1.3/go.mod h1:9VU0knjhmMkXjnMKrZ3+L2JhhtsQ/L38BbL3CRNE8tM= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo= @@ -304,19 +310,20 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus-community/pro-bing v0.6.1 h1:EQukUOma9YFZRPe4DGSscxUf9LH07rpqwisNWjSZrgU= github.com/prometheus-community/pro-bing v0.6.1/go.mod h1:jNCOI3D7pmTCeaoF41cNS6uaxeFY/Gmc3ffwbuJVzAQ= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= -github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/safchain/ethtool v0.5.10 h1:Im294gZtuf4pSGJRAOGKaASNi3wMeFaGaWuSaomedpc= github.com/safchain/ethtool v0.5.10/go.mod h1:w9jh2Lx7YBR4UwzLkzCmWl85UY0W2uZdd7/DckVE5+c= github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= -github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= -github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= +github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0= +github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= @@ -344,51 +351,50 @@ github.com/tailscale/certstore v0.1.1-0.20231202035212-d3fa0460f47e h1:PtWT87weP github.com/tailscale/certstore v0.1.1-0.20231202035212-d3fa0460f47e/go.mod h1:XrBNfAFN+pwoWuksbFS9Ccxnopa15zJGgXRFN90l3K4= github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 h1:Gzfnfk2TWrk8Jj4P4c1a3CtQyMaTVCznlkLZI++hok4= github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55/go.mod h1:4k4QO+dQ3R5FofL+SanAUZe+/QfeK0+OIuwDIRu2vSg= -github.com/tailscale/golang-x-crypto v0.0.0-20240604161659-3fde5e568aa4 h1:rXZGgEa+k2vJM8xT0PoSKfVXwFGPQ3z3CJfmnHJkZZw= -github.com/tailscale/golang-x-crypto v0.0.0-20240604161659-3fde5e568aa4/go.mod h1:ikbF+YT089eInTp9f2vmvy4+ZVnW5hzX1q2WknxSprQ= +github.com/tailscale/golang-x-crypto v0.0.0-20250404221719-a5573b049869 h1:SRL6irQkKGQKKLzvQP/ke/2ZuB7Py5+XuqtOgSj+iMM= +github.com/tailscale/golang-x-crypto v0.0.0-20250404221719-a5573b049869/go.mod h1:ikbF+YT089eInTp9f2vmvy4+ZVnW5hzX1q2WknxSprQ= github.com/tailscale/goupnp v1.0.1-0.20210804011211-c64d0f06ea05 h1:4chzWmimtJPxRs2O36yuGRW3f9SYV+bMTTvMBI0EKio= github.com/tailscale/goupnp v1.0.1-0.20210804011211-c64d0f06ea05/go.mod h1:PdCqy9JzfWMJf1H5UJW2ip33/d4YkoKN0r67yKH1mG8= github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a h1:SJy1Pu0eH1C29XwJucQo73FrleVK6t4kYz4NVhp34Yw= github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a/go.mod h1:DFSS3NAGHthKo1gTlmEcSBiZrRJXi28rLNd/1udP1c8= github.com/tailscale/netlink v1.1.1-0.20240822203006-4d49adab4de7 h1:uFsXVBE9Qr4ZoF094vE6iYTLDl0qCiKzYXlL6UeWObU= github.com/tailscale/netlink v1.1.1-0.20240822203006-4d49adab4de7/go.mod h1:NzVQi3Mleb+qzq8VmcWpSkcSYxXIg0DkI6XDzpVkhJ0= -github.com/tailscale/peercred v0.0.0-20240214030740-b535050b2aa4 h1:Gz0rz40FvFVLTBk/K8UNAenb36EbDSnh+q7Z9ldcC8w= -github.com/tailscale/peercred v0.0.0-20240214030740-b535050b2aa4/go.mod h1:phI29ccmHQBc+wvroosENp1IF9195449VDnFDhJ4rJU= -github.com/tailscale/web-client-prebuilt v0.0.0-20240226180453-5db17b287bf1 h1:tdUdyPqJ0C97SJfjB9tW6EylTtreyee9C44de+UBG0g= -github.com/tailscale/web-client-prebuilt v0.0.0-20240226180453-5db17b287bf1/go.mod h1:agQPE6y6ldqCOui2gkIh7ZMztTkIQKH049tv8siLuNQ= +github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc h1:24heQPtnFR+yfntqhI3oAu9i27nEojcQ4NuBQOo5ZFA= +github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc/go.mod h1:f93CXfllFsO9ZQVq+Zocb1Gp4G5Fz0b0rXHLOzt/Djc= +github.com/tailscale/web-client-prebuilt v0.0.0-20250124233751-d4cd19a26976 h1:UBPHPtv8+nEAy2PD8RyAhOYvau1ek0HDJqLS/Pysi14= +github.com/tailscale/web-client-prebuilt v0.0.0-20250124233751-d4cd19a26976/go.mod h1:agQPE6y6ldqCOui2gkIh7ZMztTkIQKH049tv8siLuNQ= github.com/tailscale/wf v0.0.0-20240214030419-6fbb0a674ee6 h1:l10Gi6w9jxvinoiq15g8OToDdASBni4CyJOdHY1Hr8M= github.com/tailscale/wf v0.0.0-20240214030419-6fbb0a674ee6/go.mod h1:ZXRML051h7o4OcI0d3AaILDIad/Xw0IkXaHM17dic1Y= -github.com/tailscale/wireguard-go v0.0.0-20240905161824-799c1978fafc h1:cezaQN9pvKVaw56Ma5qr/G646uKIYP0yQf+OyWN/okc= -github.com/tailscale/wireguard-go v0.0.0-20240905161824-799c1978fafc/go.mod h1:BOm5fXUBFM+m9woLNBoxI9TaBXXhGNP50LX/TGIvGb4= +github.com/tailscale/wireguard-go v0.0.0-20250716170648-1d0488a3d7da h1:jVRUZPRs9sqyKlYHHzHjAqKN+6e/Vog6NpHYeNPJqOw= +github.com/tailscale/wireguard-go v0.0.0-20250716170648-1d0488a3d7da/go.mod h1:BOm5fXUBFM+m9woLNBoxI9TaBXXhGNP50LX/TGIvGb4= github.com/tailscale/xnet v0.0.0-20240729143630-8497ac4dab2e h1:zOGKqN5D5hHhiYUp091JqK7DPCqSARyUfduhGUY8Bek= github.com/tailscale/xnet v0.0.0-20240729143630-8497ac4dab2e/go.mod h1:orPd6JZXXRyuDusYilywte7k094d7dycXXU5YnWsrwg= github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA= github.com/tc-hib/winres v0.2.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk= -github.com/tcnksm/go-httpstat v0.2.0 h1:rP7T5e5U2HfmOBmZzGgGZjBQ5/GluWUylujl0tJ04I0= -github.com/tcnksm/go-httpstat v0.2.0/go.mod h1:s3JVJFtQxtBEBC9dwcdTTXS9xFnM3SXAZwPG41aurT8= -github.com/u-root/u-root v0.12.0 h1:K0AuBFriwr0w/PGS3HawiAw89e3+MU7ks80GpghAsNs= -github.com/u-root/u-root v0.12.0/go.mod h1:FYjTOh4IkIZHhjsd17lb8nYW6udgXdJhG1c0r6u0arI= -github.com/u-root/uio v0.0.0-20240118234441-a3c409a6018e h1:BA9O3BmlTmpjbvajAwzWx4Wo2TRVdpPXZEeemGQcajw= -github.com/u-root/uio v0.0.0-20240118234441-a3c409a6018e/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= +github.com/u-root/u-root v0.14.0 h1:Ka4T10EEML7dQ5XDvO9c3MBN8z4nuSnGjcd1jmU2ivg= +github.com/u-root/u-root v0.14.0/go.mod h1:hAyZorapJe4qzbLWlAkmSVCJGbfoU9Pu4jpJ1WMluqE= +github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 h1:pyC9PaHYZFgEKFdlp3G8RaCKgVpHZnecvArXvPXcFkM= +github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA= github.com/undefinedlabs/go-mpatch v1.0.7 h1:943FMskd9oqfbZV0qRVKOUsXQhTLXL0bQTVbQSpzmBs= github.com/undefinedlabs/go-mpatch v1.0.7/go.mod h1:TyJZDQ/5AgyN7FSLiBJ8RO9u2c6wbtRvK827b6AVqY4= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ= +github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY= github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -go.mongodb.org/mongo-driver v1.17.3 h1:TQyXhnsWfWtgAhMtOgtYHMTkZIfBTpMTsMnd9ZBeHxQ= -go.mongodb.org/mongo-driver v1.17.3/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= -go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= -go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= -go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= -go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= -go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= -go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= -go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= +go.mongodb.org/mongo-driver v1.17.6 h1:87JUG1wZfWsr6rIz3ZmpH90rL5tea7O3IHuSwHUpsss= +go.mongodb.org/mongo-driver v1.17.6/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= @@ -397,48 +403,43 @@ go4.org/mem v0.0.0-20240501181205-ae6ca9944745 h1:Tl++JLUCe4sxGu8cTpDzRLd3tN7US4 go4.org/mem v0.0.0-20240501181205-ae6ca9944745/go.mod h1:reUoABIJ9ikfM5sgtSF3Wushcza7+WeD01VB9Lirh3g= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= -golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= -golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= -golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b h1:DXr+pvt3nC887026GRP39Ej11UATqWDmWuS99x26cD0= -golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4= -golang.org/x/exp/typeparams v0.0.0-20240119083558-1b970713d09a h1:8qmSSA8Gz/1kTrCe0nqR0R3Gb/NDhykzWw2q2mWZydM= -golang.org/x/exp/typeparams v0.0.0-20240119083558-1b970713d09a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= -golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= -golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= -golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= -golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= -golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/exp v0.0.0-20260211191109-2735e65f0518 h1:2E1CW7v5QB+Wi3N+MXllOtVR6SFmI8iJM8EdzgxrgrU= +golang.org/x/exp v0.0.0-20260211191109-2735e65f0518/go.mod h1:K79w1Vqn7PoiZn+TkNpx3BUWUQksGO3JcVX6qIjytmA= +golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8= +golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/image v0.27.0 h1:C8gA4oWU/tKkdCfYT6T2u4faJu3MeNS5O8UPWlPF61w= +golang.org/x/image v0.27.0/go.mod h1:xbdrClrAUway1MUTEZDq9mz/UpRwYAkFFNUslZtcB+g= +golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= +golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= +golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= +golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.1-0.20230131160137-e7d7f63158de/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= -golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= -golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= -golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= -golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= -golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= +golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= golang.zx2c4.com/wireguard/windows v0.5.3 h1:On6j2Rpn3OEMXqBq00QEDC7bWSZrPIHKIus8eIuExIE= golang.zx2c4.com/wireguard/windows v0.5.3/go.mod h1:9TEe8TJmtwyQebdFwAkEWOPr3prrtqm+REGFifP60hI= -google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= -google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -447,26 +448,24 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gvisor.dev/gvisor v0.0.0-20240722211153-64c016c92987 h1:TU8z2Lh3Bbq77w0t1eG8yRlLcNHzZu3x6mhoH2Mk0c8= -gvisor.dev/gvisor v0.0.0-20240722211153-64c016c92987/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= +gvisor.dev/gvisor v0.0.0-20250205023644-9414b50a5633 h1:2gap+Kh/3F47cO6hAu3idFvsJ0ue6TRcEi2IUkv/F8k= +gvisor.dev/gvisor v0.0.0-20250205023644-9414b50a5633/go.mod h1:5DMfjtclAbTIjbXqO1qCe2K5GKKxWz2JHvCChuTcJEM= honnef.co/go/tools v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I= honnef.co/go/tools v0.5.1/go.mod h1:e9irvo83WDG9/irijV44wr3tbhcFeRnfpVlRqVwpzMs= howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= -k8s.io/apimachinery v0.34.0 h1:eR1WO5fo0HyoQZt1wdISpFDffnWOvFLOOeJ7MgIv4z0= -k8s.io/apimachinery v0.34.0/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= -sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= -sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= +k8s.io/apimachinery v0.34.2 h1:zQ12Uk3eMHPxrsbUJgNF8bTauTVR2WgqJsTmwTE/NW4= +k8s.io/apimachinery v0.34.2/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= +sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg= +sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k= software.sslmate.com/src/go-pkcs12 v0.4.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI= -tailscale.com v1.74.1 h1:qhhkN+0gFZasczi+0n0eBxwfP/ZaUr+05cWdsOQ3GT0= -tailscale.com v1.74.1/go.mod h1:3iACpCONQ4lauDXvwfoGlwNCpfbVxjdc2j6G9EuFOW8= +tailscale.com v1.90.6 h1:EhYPiZP/xcLeinikaLA0kn4CQT3+z9SZ13IB/kzWhd4= +tailscale.com v1.90.6/go.mod h1:+9EX6pOGCNa6pxCVRhhlJLy/qnkDzOplFYpeZyYlCT0=