diff --git a/args.go b/args.go index 7951038a1..345b78886 100644 --- a/args.go +++ b/args.go @@ -159,6 +159,8 @@ const ( ArgClusterAutoscalerExpanders = "expanders" // ArgEnableRoutingAgent enables the routing-agent cluster plugin. ArgEnableRoutingAgent = "enable-routing-agent" + // ArgEnablePeerToPeerOciRegistryPlugin enables the Peer-to-peer OCI registry cluster plugin. + ArgEnablePeerToPeerOciRegistryPlugin = "enable-peer-to-peer-oci-registry-plugin" // ArgEnableCorednsAutoscaler enables the CoreDNS Autoscaler cluster plugin. ArgEnableCorednsAutoscaler = "enable-coredns-autoscaler" // ArgEnableAmdGpuDevicePlugin enables automatic amd gpu device plugin installation. diff --git a/commands/displayers/kubernetes.go b/commands/displayers/kubernetes.go index b167c3e71..c685bce1b 100644 --- a/commands/displayers/kubernetes.go +++ b/commands/displayers/kubernetes.go @@ -5,8 +5,9 @@ import ( "io" "strings" - "github.com/digitalocean/doctl/do" "github.com/digitalocean/godo" + + "github.com/digitalocean/doctl/do" ) type KubernetesClusters struct { @@ -52,6 +53,7 @@ func (clusters *KubernetesClusters) Cols() []string { "Autoscaler.UnneededTime", "Autoscaler.Expanders", "RoutingAgent", + "PeerToPeerOciRegistryPlugin", "CorednsAutoscaler", "AmdGpuDevicePlugin", "AmdGpuDeviceMetricsExporterPlugin", @@ -92,6 +94,7 @@ func (clusters *KubernetesClusters) ColMap() map[string]string { "Autoscaler.UnneededTime": "Autoscaler Scale Down Unneeded Time", "Autoscaler.Expanders": "Autoscaler Custom Expanders", "RoutingAgent": "Routing Agent", + "PeerToPeerOciRegistryPlugin": "Peer-to-peer OCI registry Plugin", "CorednsAutoscaler": "CoreDNS Autoscaler", "AmdGpuDevicePlugin": "AMD GPU Device Plugin", "AmdGpuDeviceMetricsExporterPlugin": "AMD GPU Device Metrics Exporter Plugin", @@ -133,6 +136,7 @@ func (clusters *KubernetesClusters) KV() []map[string]any { "Autoscaler.UnneededTime": "", "Autoscaler.Expanders": "", "RoutingAgent": cluster.RoutingAgent != nil && *cluster.RoutingAgent.Enabled, + "PeerToPeerOciRegistryPlugin": cluster.P2pOciRegistryPlugin != nil && *cluster.P2pOciRegistryPlugin.Enabled, "CorednsAutoscaler": cluster.CorednsAutoscaler != nil && *cluster.CorednsAutoscaler.Enabled, "AmdGpuDevicePlugin": cluster.AmdGpuDevicePlugin != nil && *cluster.AmdGpuDevicePlugin.Enabled, "AmdGpuDeviceMetricsExporterPlugin": cluster.AmdGpuDeviceMetricsExporterPlugin != nil && *cluster.AmdGpuDeviceMetricsExporterPlugin.Enabled, diff --git a/commands/kubernetes.go b/commands/kubernetes.go index ec36b1f24..df1ad2e25 100644 --- a/commands/kubernetes.go +++ b/commands/kubernetes.go @@ -323,6 +323,8 @@ After creating a cluster, a configuration context is added to kubectl and made a "Customizes expanders used by cluster-autoscaler. The autoscaler will apply each expander from the provided comma-separated list to narrow down the selection of node types created to scale up, until either a single node type is left, or the list of expanders is exhausted. Available expanders: random, least-waste, priority. If this flag is empty, autoscaler will use its default expanders.") AddBoolFlag(cmdKubeClusterCreate, doctl.ArgEnableRoutingAgent, "", false, "Creates the cluster with routing-agent enabled. Defaults to false. To enable routing-agent, supply --enable-routing-agent=true.") + AddBoolFlag(cmdKubeClusterCreate, doctl.ArgEnablePeerToPeerOciRegistryPlugin, "", false, + "Creates the cluster with Peer-to-peer OCI registry plugin enabled. Defaults to false. To enable it, supply --enable-peer-to-peer-oci-registry-plugin=true.") AddBoolFlag(cmdKubeClusterCreate, doctl.ArgEnableCorednsAutoscaler, "", false, "Creates the cluster with the CoreDNS Autoscaler enabled, which scales CoreDNS replicas in proportion to the cluster's size. When omitted, API applies version-specific default (true for 1.36.0+; false for older). Use --enable-coredns-autoscaler=false to disable.") AddBoolFlag(cmdKubeClusterCreate, doctl.ArgEnableAmdGpuDevicePlugin, "", false, @@ -391,6 +393,8 @@ Updates the configuration values for a Kubernetes cluster. The cluster must be r "Creates the cluster with control plane firewall enabled. Defaults to false. To enable the control plane firewall, supply --enable-control-plane-firewall=true.") AddBoolFlag(cmdKubeClusterUpdate, doctl.ArgEnableRoutingAgent, "", false, "Creates the cluster with routing-agent enabled. Defaults to false. To enable routing-agent, supply --routing-agent=true.") + AddBoolFlag(cmdKubeClusterUpdate, doctl.ArgEnablePeerToPeerOciRegistryPlugin, "", false, + "Creates the cluster with Peer-to-peer OCI registry plugin enabled. Defaults to false. To enable it, supply --enable-peer-to-peer-oci-registry-plugin=true.") AddBoolFlag(cmdKubeClusterUpdate, doctl.ArgEnableCorednsAutoscaler, "", false, "Creates the cluster with the CoreDNS Autoscaler enabled, which scales CoreDNS replicas in proportion to the cluster's size. When omitted, API applies version-specific default (true for 1.36.0+; false for older). To always enable it, supply --enable-coredns-autoscaler=true.") AddBoolFlag(cmdKubeClusterUpdate, doctl.ArgEnableAmdGpuDevicePlugin, "", false, @@ -1855,6 +1859,16 @@ func buildClusterCreateRequestFromArgs(c *CmdConfig, r *godo.KubernetesClusterCr } } + enableP2pOciRegistryPlugin, err := c.Doit.GetBoolPtr(c.NS, doctl.ArgEnablePeerToPeerOciRegistryPlugin) + if err != nil { + return err + } + if enableP2pOciRegistryPlugin != nil { + r.P2pOciRegistryPlugin = &godo.KubernetesP2pOciRegistry{ + Enabled: enableP2pOciRegistryPlugin, + } + } + // Only forward the CoreDNS Autoscaler flag when the user explicitly sets it so the // server-side defaulting (version-based) isn't suppressed by sending an unset "false". if c.Doit.IsSet(doctl.ArgEnableCorednsAutoscaler) { @@ -2086,6 +2100,16 @@ func buildClusterUpdateRequestFromArgs(c *CmdConfig, r *godo.KubernetesClusterUp } } + enableP2pOciRegistryPlugin, err := c.Doit.GetBoolPtr(c.NS, doctl.ArgEnablePeerToPeerOciRegistryPlugin) + if err != nil { + return err + } + if enableP2pOciRegistryPlugin != nil { + r.P2pOciRegistryPlugin = &godo.KubernetesP2pOciRegistry{ + Enabled: enableP2pOciRegistryPlugin, + } + } + // Only forward the CoreDNS Autoscaler flag when the user explicitly sets it so we don't // disable existing state on a no-op update by sending an unset "false". if c.Doit.IsSet(doctl.ArgEnableCorednsAutoscaler) { diff --git a/commands/kubernetes_test.go b/commands/kubernetes_test.go index 7631c561a..93b5a8136 100644 --- a/commands/kubernetes_test.go +++ b/commands/kubernetes_test.go @@ -58,6 +58,9 @@ var ( RoutingAgent: &godo.KubernetesRoutingAgent{ Enabled: boolPtr(true), }, + P2pOciRegistryPlugin: &godo.KubernetesP2pOciRegistry{ + Enabled: boolPtr(true), + }, AmdGpuDevicePlugin: &godo.KubernetesAmdGpuDevicePlugin{ Enabled: boolPtr(true), }, @@ -726,6 +729,9 @@ func TestKubernetesCreate(t *testing.T) { RoutingAgent: &godo.KubernetesRoutingAgent{ Enabled: boolPtr(true), }, + P2pOciRegistryPlugin: &godo.KubernetesP2pOciRegistry{ + Enabled: boolPtr(true), + }, AmdGpuDevicePlugin: &godo.KubernetesAmdGpuDevicePlugin{ Enabled: boolPtr(true), }, @@ -772,6 +778,7 @@ func TestKubernetesCreate(t *testing.T) { config.Doit.Set(config.NS, doctl.ArgClusterAutoscalerScaleDownUnneededTime, testCluster.ClusterAutoscalerConfiguration.ScaleDownUnneededTime) config.Doit.Set(config.NS, doctl.ArgEnableRoutingAgent, testCluster.RoutingAgent.Enabled) + config.Doit.Set(config.NS, doctl.ArgEnablePeerToPeerOciRegistryPlugin, testCluster.P2pOciRegistryPlugin.Enabled) config.Doit.Set(config.NS, doctl.ArgEnableAmdGpuDevicePlugin, testCluster.AmdGpuDevicePlugin.Enabled) config.Doit.Set(config.NS, doctl.ArgEnableAmdGpuDeviceMetricsExporterPlugin, testCluster.AmdGpuDeviceMetricsExporterPlugin.Enabled) config.Doit.Set(config.NS, doctl.ArgEnableNvidiaGpuDevicePlugin, testCluster.NvidiaGpuDevicePlugin.Enabled) @@ -889,6 +896,9 @@ func TestKubernetesUpdate(t *testing.T) { RoutingAgent: &godo.KubernetesRoutingAgent{ Enabled: boolPtr(true), }, + P2pOciRegistryPlugin: &godo.KubernetesP2pOciRegistry{ + Enabled: boolPtr(true), + }, AmdGpuDevicePlugin: &godo.KubernetesAmdGpuDevicePlugin{ Enabled: boolPtr(true), }, @@ -923,6 +933,7 @@ func TestKubernetesUpdate(t *testing.T) { config.Doit.Set(config.NS, doctl.ArgClusterAutoscalerScaleDownUtilizationThreshold, testCluster.ClusterAutoscalerConfiguration.ScaleDownUtilizationThreshold) config.Doit.Set(config.NS, doctl.ArgClusterAutoscalerScaleDownUnneededTime, testCluster.ClusterAutoscalerConfiguration.ScaleDownUnneededTime) config.Doit.Set(config.NS, doctl.ArgEnableRoutingAgent, testCluster.RoutingAgent.Enabled) + config.Doit.Set(config.NS, doctl.ArgEnablePeerToPeerOciRegistryPlugin, testCluster.P2pOciRegistryPlugin.Enabled) config.Doit.Set(config.NS, doctl.ArgEnableAmdGpuDevicePlugin, testCluster.AmdGpuDevicePlugin.Enabled) config.Doit.Set(config.NS, doctl.ArgEnableAmdGpuDeviceMetricsExporterPlugin, testCluster.AmdGpuDeviceMetricsExporterPlugin.Enabled) config.Doit.Set(config.NS, doctl.ArgEnableNvidiaGpuDevicePlugin, testCluster.NvidiaGpuDevicePlugin.Enabled) @@ -961,6 +972,9 @@ func TestKubernetesUpdate(t *testing.T) { RoutingAgent: &godo.KubernetesRoutingAgent{ Enabled: boolPtr(true), }, + P2pOciRegistryPlugin: &godo.KubernetesP2pOciRegistry{ + Enabled: boolPtr(true), + }, AmdGpuDevicePlugin: &godo.KubernetesAmdGpuDevicePlugin{ Enabled: boolPtr(true), }, @@ -996,6 +1010,7 @@ func TestKubernetesUpdate(t *testing.T) { config.Doit.Set(config.NS, doctl.ArgClusterAutoscalerScaleDownUtilizationThreshold, testCluster.ClusterAutoscalerConfiguration.ScaleDownUtilizationThreshold) config.Doit.Set(config.NS, doctl.ArgClusterAutoscalerScaleDownUnneededTime, testCluster.ClusterAutoscalerConfiguration.ScaleDownUnneededTime) config.Doit.Set(config.NS, doctl.ArgEnableRoutingAgent, testCluster.RoutingAgent.Enabled) + config.Doit.Set(config.NS, doctl.ArgEnablePeerToPeerOciRegistryPlugin, testCluster.P2pOciRegistryPlugin.Enabled) config.Doit.Set(config.NS, doctl.ArgEnableAmdGpuDevicePlugin, testCluster.AmdGpuDevicePlugin.Enabled) config.Doit.Set(config.NS, doctl.ArgEnableAmdGpuDeviceMetricsExporterPlugin, testCluster.AmdGpuDeviceMetricsExporterPlugin.Enabled) config.Doit.Set(config.NS, doctl.ArgEnableNvidiaGpuDevicePlugin, testCluster.NvidiaGpuDevicePlugin.Enabled) diff --git a/go.mod b/go.mod index 05e79b250..095dff073 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.25.0 require ( github.com/blang/semver v3.5.1+incompatible github.com/creack/pty v1.1.21 - github.com/digitalocean/godo v1.198.0 + github.com/digitalocean/godo v1.199.0 github.com/docker/cli v24.0.5+incompatible github.com/docker/docker v25.0.6+incompatible github.com/docker/docker-credential-helpers v0.7.0 // indirect diff --git a/go.sum b/go.sum index c0d8cc6fe..1355d9b80 100644 --- a/go.sum +++ b/go.sum @@ -95,6 +95,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/digitalocean/godo v1.198.0 h1:jylPVf1efxpOZnTOSc3K4a+Qse9pTl/AHu+GExthMNw= github.com/digitalocean/godo v1.198.0/go.mod h1:xQsWpVCCbkDrWisHA72hPzPlnC+4W5w/McZY5ij9uvU= +github.com/digitalocean/godo v1.199.0 h1:brSUWakhtutyzNTvRGSvn+lXC7MTg8VA9DGoA6miWXA= +github.com/digitalocean/godo v1.199.0/go.mod h1:xQsWpVCCbkDrWisHA72hPzPlnC+4W5w/McZY5ij9uvU= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/cli v24.0.5+incompatible h1:WeBimjvS0eKdH4Ygx+ihVq1Q++xg36M/rMi4aXAvodc= diff --git a/integration/kubernetes_clusters_get_test.go b/integration/kubernetes_clusters_get_test.go index 2eef997f1..0f595cd70 100644 --- a/integration/kubernetes_clusters_get_test.go +++ b/integration/kubernetes_clusters_get_test.go @@ -117,7 +117,7 @@ var ( ` k8sGetOutput = ` -ID Name Region Version Auto Upgrade HA Control Plane Status Endpoint IPv4 Cluster Subnet Service Subnet Tags Created At Updated At Node Pools Autoscaler Scale Down Utilization Autoscaler Scale Down Unneeded Time Autoscaler Custom Expanders Routing Agent CoreDNS Autoscaler AMD GPU Device Plugin AMD GPU Device Metrics Exporter Plugin NVIDIA GPU Device Plugin RDMA Shared Device Plugin -some-cluster-id some-cluster-id nyc3 some-kube-version true false running production 2018-11-15 16:00:11 +0000 UTC 2018-11-15 16:00:11 +0000 UTC frontend-pool 50% 1m30s priority, random false false false false false false +ID Name Region Version Auto Upgrade HA Control Plane Status Endpoint IPv4 Cluster Subnet Service Subnet Tags Created At Updated At Node Pools Autoscaler Scale Down Utilization Autoscaler Scale Down Unneeded Time Autoscaler Custom Expanders Routing Agent Peer-to-peer OCI registry Plugin CoreDNS Autoscaler AMD GPU Device Plugin AMD GPU Device Metrics Exporter Plugin NVIDIA GPU Device Plugin RDMA Shared Device Plugin +some-cluster-id some-cluster-id nyc3 some-kube-version true false running production 2018-11-15 16:00:11 +0000 UTC 2018-11-15 16:00:11 +0000 UTC frontend-pool 50% 1m30s priority, random false false false false false false false ` ) diff --git a/integration/projects_resources_get_test.go b/integration/projects_resources_get_test.go index f659b992c..07265cb48 100644 --- a/integration/projects_resources_get_test.go +++ b/integration/projects_resources_get_test.go @@ -343,8 +343,8 @@ ID Name Size Region Filesyste } ` projectsResourcesGetKubernetesOutput = ` -ID Name Region Version Auto Upgrade HA Control Plane Status Endpoint IPv4 Cluster Subnet Service Subnet Tags Created At Updated At Node Pools Autoscaler Scale Down Utilization Autoscaler Scale Down Unneeded Time Autoscaler Custom Expanders Routing Agent CoreDNS Autoscaler AMD GPU Device Plugin AMD GPU Device Metrics Exporter Plugin NVIDIA GPU Device Plugin RDMA Shared Device Plugin - 1111 false false provisioning k8s 2021-01-29 16:02:02 +0000 UTC 0001-01-01 00:00:00 +0000 UTC pool-test false false false false false false +ID Name Region Version Auto Upgrade HA Control Plane Status Endpoint IPv4 Cluster Subnet Service Subnet Tags Created At Updated At Node Pools Autoscaler Scale Down Utilization Autoscaler Scale Down Unneeded Time Autoscaler Custom Expanders Routing Agent Peer-to-peer OCI registry Plugin CoreDNS Autoscaler AMD GPU Device Plugin AMD GPU Device Metrics Exporter Plugin NVIDIA GPU Device Plugin RDMA Shared Device Plugin + 1111 false false provisioning k8s 2021-01-29 16:02:02 +0000 UTC 0001-01-01 00:00:00 +0000 UTC pool-test false false false false false false false ` projectsResourcesListKubernetesOutput = ` diff --git a/vendor/github.com/digitalocean/godo/CHANGELOG.md b/vendor/github.com/digitalocean/godo/CHANGELOG.md index 5b8b65dc3..27bd13789 100644 --- a/vendor/github.com/digitalocean/godo/CHANGELOG.md +++ b/vendor/github.com/digitalocean/godo/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## [1.199.0] - 2026-07-15 + +- #1052 - @llDrLove - CON-13386 Add P2pOciRegistry plugin information to Kubernetes api calls (Create, Update, Get) + ## [1.198.0] - 2026-07-07 - #1043 - @johannaratliff - Support subnet_uuid in vpcnatgateway diff --git a/vendor/github.com/digitalocean/godo/godo.go b/vendor/github.com/digitalocean/godo/godo.go index f32ae97a8..7449e69d0 100644 --- a/vendor/github.com/digitalocean/godo/godo.go +++ b/vendor/github.com/digitalocean/godo/godo.go @@ -21,7 +21,7 @@ import ( ) const ( - libraryVersion = "1.198.0" + libraryVersion = "1.199.0" defaultBaseURL = "https://api.digitalocean.com/" userAgent = "godo/" + libraryVersion mediaType = "application/json" diff --git a/vendor/github.com/digitalocean/godo/kubernetes.go b/vendor/github.com/digitalocean/godo/kubernetes.go index 039839369..87d33a607 100644 --- a/vendor/github.com/digitalocean/godo/kubernetes.go +++ b/vendor/github.com/digitalocean/godo/kubernetes.go @@ -95,6 +95,7 @@ type KubernetesClusterCreateRequest struct { RdmaSharedDevicePlugin *KubernetesRdmaSharedDevicePlugin `json:"rdma_shared_dev_plugin,omitempty"` CorednsAutoscaler *KubernetesCorednsAutoscaler `json:"coredns_autoscaler,omitempty"` SSO *KubernetesClusterSSO `json:"sso,omitempty"` + P2pOciRegistryPlugin *KubernetesP2pOciRegistry `json:"p2p_oci_registry_plugin,omitempty"` } // KubernetesClusterUpdateRequest represents a request to update a Kubernetes cluster. @@ -113,6 +114,7 @@ type KubernetesClusterUpdateRequest struct { RdmaSharedDevicePlugin *KubernetesRdmaSharedDevicePlugin `json:"rdma_shared_dev_plugin,omitempty"` CorednsAutoscaler *KubernetesCorednsAutoscaler `json:"coredns_autoscaler,omitempty"` SSO *KubernetesClusterSSO `json:"sso,omitempty"` + P2pOciRegistryPlugin *KubernetesP2pOciRegistry `json:"p2p_oci_registry_plugin,omitempty"` // Convert cluster to run highly available control plane HA *bool `json:"ha,omitempty"` @@ -258,6 +260,7 @@ type KubernetesCluster struct { RdmaSharedDevicePlugin *KubernetesRdmaSharedDevicePlugin `json:"rdma_shared_dev_plugin,omitempty"` CorednsAutoscaler *KubernetesCorednsAutoscaler `json:"coredns_autoscaler,omitempty"` SSO *KubernetesClusterSSO `json:"sso,omitempty"` + P2pOciRegistryPlugin *KubernetesP2pOciRegistry `json:"p2p_oci_registry_plugin,omitempty"` Status *KubernetesClusterStatus `json:"status,omitempty"` CreatedAt time.Time `json:"created_at,omitempty"` @@ -340,6 +343,11 @@ type KubernetesCorednsAutoscaler struct { Enabled *bool `json:"enabled"` } +// KubernetesP2pOciRegistry represents information about the Peer-to-peer OCI registry cluster plugin. +type KubernetesP2pOciRegistry struct { + Enabled *bool `json:"enabled"` +} + // KubernetesClusterSSO configures Single Sign-On (SSO) for a Kubernetes cluster. type KubernetesClusterSSO struct { Enabled bool `json:"enabled"` diff --git a/vendor/modules.txt b/vendor/modules.txt index 1bd3870b8..daf6cb80a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -64,7 +64,7 @@ github.com/creack/pty # github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc ## explicit github.com/davecgh/go-spew/spew -# github.com/digitalocean/godo v1.198.0 +# github.com/digitalocean/godo v1.199.0 ## explicit; go 1.23.0 github.com/digitalocean/godo github.com/digitalocean/godo/metrics