Skip to content

Commit d9e5ff5

Browse files
authored
add routing_agent option to kubernetes cluster (#1344)
* add routing_agent option to kubernetes cluster * fix wrong terraform notation * run make terrafmt
1 parent 6441aa2 commit d9e5ff5

5 files changed

+115
-1
lines changed

digitalocean/kubernetes/datasource_kubernetes_cluster.go

+15
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,21 @@ func DataSourceDigitalOceanKubernetesCluster() *schema.Resource {
6161
},
6262
},
6363

64+
routingAgentField: {
65+
Type: schema.TypeList,
66+
Computed: true,
67+
Optional: true,
68+
MaxItems: 1,
69+
Elem: &schema.Resource{
70+
Schema: map[string]*schema.Schema{
71+
"enabled": {
72+
Type: schema.TypeBool,
73+
Computed: true,
74+
},
75+
},
76+
},
77+
},
78+
6479
"version": {
6580
Type: schema.TypeString,
6681
Computed: true,

digitalocean/kubernetes/datasource_kubernetes_cluster_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ data "digitalocean_kubernetes_cluster" "foobar" {
5353
resource.TestCheckResourceAttrSet("data.digitalocean_kubernetes_cluster.foobar", "maintenance_policy.0.duration"),
5454
resource.TestCheckResourceAttr("digitalocean_kubernetes_cluster.foobar", "cluster_autoscaler_configuration.0.scale_down_utilization_threshold", "0.5"),
5555
resource.TestCheckResourceAttr("digitalocean_kubernetes_cluster.foobar", "cluster_autoscaler_configuration.0.scale_down_unneeded_time", "1m30s"),
56+
resource.TestCheckResourceAttr("data.digitalocean_kubernetes_cluster.foobar", "routing_agent.0.enabled", "true"),
5657
),
5758
},
5859
},
@@ -87,6 +88,10 @@ resource "digitalocean_kubernetes_cluster" "foo" {
8788
scale_down_utilization_threshold = 0.5
8889
scale_down_unneeded_time = "1m30s"
8990
}
91+
92+
routing_agent {
93+
enabled = true
94+
}
9095
}`, version, rName)
9196
}
9297

digitalocean/kubernetes/kubernetes.go

+28
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,34 @@ func expandAllowedAddresses(addrs []interface{}) []string {
263263
return expandedAddrs
264264
}
265265

266+
func expandRoutingAgentOpts(raw []interface{}) *godo.KubernetesRoutingAgent {
267+
if len(raw) == 0 || raw[0] == nil {
268+
return &godo.KubernetesRoutingAgent{}
269+
}
270+
271+
rawRoutingAgentObj := raw[0].(map[string]interface{})
272+
273+
routingAgent := &godo.KubernetesRoutingAgent{
274+
Enabled: godo.PtrTo(rawRoutingAgentObj["enabled"].(bool)),
275+
}
276+
277+
return routingAgent
278+
}
279+
280+
func flattenRoutingAgentOpts(opts *godo.KubernetesRoutingAgent) []map[string]interface{} {
281+
result := make([]map[string]interface{}, 0)
282+
if opts == nil {
283+
return result
284+
}
285+
286+
item := make(map[string]interface{})
287+
item["enabled"] = opts.Enabled
288+
289+
result = append(result, item)
290+
291+
return result
292+
}
293+
266294
func flattenMaintPolicyOpts(opts *godo.KubernetesMaintenancePolicy) []map[string]interface{} {
267295
result := make([]map[string]interface{}, 0)
268296
item := make(map[string]interface{})

digitalocean/kubernetes/resource_kubernetes_cluster.go

+27-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ var (
2525

2626
const (
2727
controlPlaneFirewallField = "control_plane_firewall"
28+
routingAgentField = "routing_agent"
2829
)
2930

3031
func ResourceDigitalOceanKubernetesCluster() *schema.Resource {
@@ -240,6 +241,21 @@ func ResourceDigitalOceanKubernetesCluster() *schema.Resource {
240241
},
241242
},
242243
},
244+
245+
routingAgentField: {
246+
Type: schema.TypeList,
247+
Optional: true,
248+
Computed: true,
249+
MaxItems: 1,
250+
Elem: &schema.Resource{
251+
Schema: map[string]*schema.Schema{
252+
"enabled": {
253+
Type: schema.TypeBool,
254+
Required: true,
255+
},
256+
},
257+
},
258+
},
243259
},
244260

245261
Timeouts: &schema.ResourceTimeout{
@@ -372,10 +388,15 @@ func resourceDigitalOceanKubernetesClusterCreate(ctx context.Context, d *schema.
372388
if controlPlaneFirewall, ok := d.GetOk(controlPlaneFirewallField); ok {
373389
opts.ControlPlaneFirewall = expandControlPlaneFirewallOpts(controlPlaneFirewall.([]interface{}))
374390
}
391+
375392
if caConfig, ok := d.GetOk("cluster_autoscaler_configuration"); ok {
376393
opts.ClusterAutoscalerConfiguration = expandCAConfigOpts(caConfig.([]interface{}))
377394
}
378395

396+
if routingAgent, ok := d.GetOk(routingAgentField); ok {
397+
opts.RoutingAgent = expandRoutingAgentOpts(routingAgent.([]interface{}))
398+
}
399+
379400
cluster, _, err := client.Kubernetes.Create(context.Background(), opts)
380401
if err != nil {
381402
return diag.Errorf("Error creating Kubernetes cluster: %s", err)
@@ -443,6 +464,10 @@ func digitaloceanKubernetesClusterRead(
443464
return diag.Errorf("[DEBUG] Error setting %s - error: %#v", controlPlaneFirewallField, err)
444465
}
445466

467+
if err := d.Set(routingAgentField, flattenRoutingAgentOpts(cluster.RoutingAgent)); err != nil {
468+
return diag.Errorf("[DEBUG] Error setting %s - error: %#v", routingAgentField, err)
469+
}
470+
446471
if err := d.Set("maintenance_policy", flattenMaintPolicyOpts(cluster.MaintenancePolicy)); err != nil {
447472
return diag.Errorf("[DEBUG] Error setting maintenance_policy - error: %#v", err)
448473
}
@@ -505,7 +530,7 @@ func resourceDigitalOceanKubernetesClusterUpdate(ctx context.Context, d *schema.
505530
client := meta.(*config.CombinedConfig).GodoClient()
506531

507532
// Figure out the changes and then call the appropriate API methods
508-
if d.HasChanges("name", "tags", "auto_upgrade", "surge_upgrade", "maintenance_policy", "ha", controlPlaneFirewallField, "cluster_autoscaler_configuration") {
533+
if d.HasChanges("name", "tags", "auto_upgrade", "surge_upgrade", "maintenance_policy", "ha", controlPlaneFirewallField, "cluster_autoscaler_configuration", routingAgentField) {
509534

510535
opts := &godo.KubernetesClusterUpdateRequest{
511536
Name: d.Get("name").(string),
@@ -514,6 +539,7 @@ func resourceDigitalOceanKubernetesClusterUpdate(ctx context.Context, d *schema.
514539
SurgeUpgrade: d.Get("surge_upgrade").(bool),
515540
HA: godo.PtrTo(d.Get("ha").(bool)),
516541
ControlPlaneFirewall: expandControlPlaneFirewallOpts(d.Get(controlPlaneFirewallField).([]interface{})),
542+
RoutingAgent: expandRoutingAgentOpts(d.Get(routingAgentField).([]interface{})),
517543
}
518544

519545
if maint, ok := d.GetOk("maintenance_policy"); ok {

digitalocean/kubernetes/resource_kubernetes_cluster_test.go

+40
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ func TestAccDigitalOceanKubernetesCluster_Basic(t *testing.T) {
9696
resource.TestCheckResourceAttr("digitalocean_kubernetes_cluster.foobar", "destroy_all_associated_resources", "false"),
9797
resource.TestCheckResourceAttrSet("digitalocean_kubernetes_cluster.foobar", "cluster_autoscaler_configuration.0.scale_down_utilization_threshold"),
9898
resource.TestCheckResourceAttrSet("digitalocean_kubernetes_cluster.foobar", "cluster_autoscaler_configuration.0.scale_down_unneeded_time"),
99+
resource.TestCheckResourceAttr("digitalocean_kubernetes_cluster.foobar", "routing_agent.0.enabled", "false"),
99100
),
100101
},
101102
// Update: remove default node_pool taints
@@ -893,6 +894,26 @@ func TestAccDigitalOceanKubernetesCluster_VPCNative(t *testing.T) {
893894
})
894895
}
895896

897+
func TestAccDigitalOceanKubernetesCluster_RoutingAgentEnabled(t *testing.T) {
898+
rName := acceptance.RandomTestName()
899+
var k8s godo.KubernetesCluster
900+
901+
resource.ParallelTest(t, resource.TestCase{
902+
PreCheck: func() { acceptance.TestAccPreCheck(t) },
903+
ProviderFactories: acceptance.TestAccProviderFactories,
904+
CheckDestroy: testAccCheckDigitalOceanKubernetesClusterDestroy,
905+
Steps: []resource.TestStep{
906+
{
907+
Config: testAccDigitalOceanKubernetesConfigRoutingAgentEnabled(testClusterVersionPrevious, rName),
908+
Check: resource.ComposeAggregateTestCheckFunc(
909+
testAccCheckDigitalOceanKubernetesClusterExists("digitalocean_kubernetes_cluster.foobar", &k8s),
910+
resource.TestCheckResourceAttr("digitalocean_kubernetes_cluster.foobar", "routing_agent.0.enabled", "true"),
911+
),
912+
},
913+
},
914+
})
915+
}
916+
896917
func testAccDigitalOceanKubernetesConfigBasic(testClusterVersion string, rName string) string {
897918
return fmt.Sprintf(`%s
898919
@@ -1171,6 +1192,25 @@ func testAccCheckDigitalOceanKubernetesClusterDestroy(s *terraform.State) error
11711192
return nil
11721193
}
11731194

1195+
func testAccDigitalOceanKubernetesConfigRoutingAgentEnabled(testClusterVersion string, rName string) string {
1196+
return fmt.Sprintf(`%s
1197+
1198+
resource "digitalocean_kubernetes_cluster" "foobar" {
1199+
name = "%s"
1200+
region = "nyc1"
1201+
version = data.digitalocean_kubernetes_versions.test.latest_version
1202+
routing_agent {
1203+
enabled = true
1204+
}
1205+
node_pool {
1206+
name = "default"
1207+
size = "s-1vcpu-2gb"
1208+
node_count = 1
1209+
}
1210+
}
1211+
`, testClusterVersion, rName)
1212+
}
1213+
11741214
func testAccCheckDigitalOceanKubernetesClusterExists(n string, cluster *godo.KubernetesCluster) resource.TestCheckFunc {
11751215
return func(s *terraform.State) error {
11761216
rs, ok := s.RootModule().Resources[n]

0 commit comments

Comments
 (0)