github.com/bradfeehan/terraform@v0.7.0-rc3.0.20170529055808-34b45c5ad841/builtin/providers/kubernetes/resource_kubernetes_service_test.go (about)

     1  package kubernetes
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  	"regexp"
     7  	"testing"
     8  
     9  	"github.com/hashicorp/terraform/helper/acctest"
    10  	"github.com/hashicorp/terraform/helper/resource"
    11  	"github.com/hashicorp/terraform/terraform"
    12  	api "k8s.io/kubernetes/pkg/api/v1"
    13  	kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
    14  	"k8s.io/kubernetes/pkg/util/intstr"
    15  )
    16  
    17  func TestAccKubernetesService_basic(t *testing.T) {
    18  	var conf api.Service
    19  	name := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
    20  
    21  	resource.Test(t, resource.TestCase{
    22  		PreCheck:      func() { testAccPreCheck(t) },
    23  		IDRefreshName: "kubernetes_service.test",
    24  		Providers:     testAccProviders,
    25  		CheckDestroy:  testAccCheckKubernetesServiceDestroy,
    26  		Steps: []resource.TestStep{
    27  			{
    28  				Config: testAccKubernetesServiceConfig_basic(name),
    29  				Check: resource.ComposeAggregateTestCheckFunc(
    30  					testAccCheckKubernetesServiceExists("kubernetes_service.test", &conf),
    31  					resource.TestCheckResourceAttr("kubernetes_service.test", "metadata.0.name", name),
    32  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.generation"),
    33  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.resource_version"),
    34  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.self_link"),
    35  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.uid"),
    36  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.#", "1"),
    37  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.#", "1"),
    38  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "spec.0.cluster_ip"),
    39  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.name", ""),
    40  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.node_port", "0"),
    41  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.port", "8080"),
    42  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.protocol", "TCP"),
    43  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.target_port", "80"),
    44  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.session_affinity", "None"),
    45  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.type", "ClusterIP"),
    46  					testAccCheckServicePorts(&conf, []api.ServicePort{
    47  						{
    48  							Port:       int32(8080),
    49  							Protocol:   api.ProtocolTCP,
    50  							TargetPort: intstr.FromInt(80),
    51  						},
    52  					}),
    53  				),
    54  			},
    55  			{
    56  				Config: testAccKubernetesServiceConfig_modified(name),
    57  				Check: resource.ComposeAggregateTestCheckFunc(
    58  					testAccCheckKubernetesServiceExists("kubernetes_service.test", &conf),
    59  					resource.TestCheckResourceAttr("kubernetes_service.test", "metadata.0.name", name),
    60  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.generation"),
    61  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.resource_version"),
    62  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.self_link"),
    63  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.uid"),
    64  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.#", "1"),
    65  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.#", "1"),
    66  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "spec.0.cluster_ip"),
    67  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.name", ""),
    68  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.node_port", "0"),
    69  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.port", "8081"),
    70  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.protocol", "TCP"),
    71  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.target_port", "80"),
    72  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.session_affinity", "None"),
    73  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.type", "ClusterIP"),
    74  					testAccCheckServicePorts(&conf, []api.ServicePort{
    75  						{
    76  							Port:       int32(8081),
    77  							Protocol:   api.ProtocolTCP,
    78  							TargetPort: intstr.FromInt(80),
    79  						},
    80  					}),
    81  				),
    82  			},
    83  		},
    84  	})
    85  }
    86  
    87  func TestAccKubernetesService_loadBalancer(t *testing.T) {
    88  	var conf api.Service
    89  	name := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
    90  
    91  	resource.Test(t, resource.TestCase{
    92  		PreCheck:      func() { testAccPreCheck(t) },
    93  		IDRefreshName: "kubernetes_service.test",
    94  		Providers:     testAccProviders,
    95  		CheckDestroy:  testAccCheckKubernetesServiceDestroy,
    96  		Steps: []resource.TestStep{
    97  			{
    98  				Config: testAccKubernetesServiceConfig_loadBalancer(name),
    99  				Check: resource.ComposeAggregateTestCheckFunc(
   100  					testAccCheckKubernetesServiceExists("kubernetes_service.test", &conf),
   101  					resource.TestCheckResourceAttr("kubernetes_service.test", "metadata.0.name", name),
   102  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.#", "1"),
   103  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.#", "1"),
   104  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.#", "1"),
   105  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "spec.0.port.0.node_port"),
   106  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.port", "8888"),
   107  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.protocol", "TCP"),
   108  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.target_port", "80"),
   109  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "spec.0.cluster_ip"),
   110  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_ips.#", "2"),
   111  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_ips.1452553500", "10.0.0.4"),
   112  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_ips.3371212991", "10.0.0.3"),
   113  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_name", "ext-name-"+name),
   114  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.load_balancer_ip", "12.0.0.120"),
   115  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.load_balancer_source_ranges.#", "2"),
   116  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.load_balancer_source_ranges.138364083", "10.0.0.5/32"),
   117  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.load_balancer_source_ranges.445311837", "10.0.0.6/32"),
   118  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.selector.%", "1"),
   119  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.selector.App", "MyApp"),
   120  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.session_affinity", "ClientIP"),
   121  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.type", "LoadBalancer"),
   122  					testAccCheckServicePorts(&conf, []api.ServicePort{
   123  						{
   124  							Port:       int32(8888),
   125  							Protocol:   api.ProtocolTCP,
   126  							TargetPort: intstr.FromInt(80),
   127  						},
   128  					}),
   129  				),
   130  			},
   131  			{
   132  				Config: testAccKubernetesServiceConfig_loadBalancer_modified(name),
   133  				Check: resource.ComposeAggregateTestCheckFunc(
   134  					testAccCheckKubernetesServiceExists("kubernetes_service.test", &conf),
   135  					resource.TestCheckResourceAttr("kubernetes_service.test", "metadata.0.name", name),
   136  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.#", "1"),
   137  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "spec.0.cluster_ip"),
   138  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_ips.#", "2"),
   139  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_ips.1452553500", "10.0.0.4"),
   140  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_ips.563283338", "10.0.0.5"),
   141  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_name", "ext-name-modified-"+name),
   142  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.load_balancer_ip", "12.0.0.125"),
   143  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.load_balancer_source_ranges.#", "2"),
   144  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.load_balancer_source_ranges.2271073252", "10.0.0.1/32"),
   145  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.load_balancer_source_ranges.2515041290", "10.0.0.2/32"),
   146  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.#", "1"),
   147  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "spec.0.port.0.node_port"),
   148  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.port", "9999"),
   149  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.protocol", "TCP"),
   150  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.target_port", "81"),
   151  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.selector.%", "2"),
   152  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.selector.App", "MyModifiedApp"),
   153  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.selector.NewSelector", "NewValue"),
   154  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.session_affinity", "ClientIP"),
   155  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.type", "LoadBalancer"),
   156  					testAccCheckServicePorts(&conf, []api.ServicePort{
   157  						{
   158  							Port:       int32(9999),
   159  							Protocol:   api.ProtocolTCP,
   160  							TargetPort: intstr.FromInt(81),
   161  						},
   162  					}),
   163  				),
   164  			},
   165  		},
   166  	})
   167  }
   168  
   169  func TestAccKubernetesService_nodePort(t *testing.T) {
   170  	var conf api.Service
   171  	name := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
   172  
   173  	resource.Test(t, resource.TestCase{
   174  		PreCheck:      func() { testAccPreCheck(t) },
   175  		IDRefreshName: "kubernetes_service.test",
   176  		Providers:     testAccProviders,
   177  		CheckDestroy:  testAccCheckKubernetesServiceDestroy,
   178  		Steps: []resource.TestStep{
   179  			{
   180  				Config: testAccKubernetesServiceConfig_nodePort(name),
   181  				Check: resource.ComposeAggregateTestCheckFunc(
   182  					testAccCheckKubernetesServiceExists("kubernetes_service.test", &conf),
   183  					resource.TestCheckResourceAttr("kubernetes_service.test", "metadata.0.name", name),
   184  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.#", "1"),
   185  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.#", "1"),
   186  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "spec.0.cluster_ip"),
   187  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_ips.#", "2"),
   188  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_ips.1452553500", "10.0.0.4"),
   189  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_ips.563283338", "10.0.0.5"),
   190  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.external_name", "ext-name-"+name),
   191  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.load_balancer_ip", "12.0.0.125"),
   192  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.#", "2"),
   193  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.name", "first"),
   194  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "spec.0.port.0.node_port"),
   195  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.port", "10222"),
   196  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.protocol", "TCP"),
   197  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.0.target_port", "22"),
   198  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.1.name", "second"),
   199  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "spec.0.port.1.node_port"),
   200  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.1.port", "10333"),
   201  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.1.protocol", "TCP"),
   202  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.port.1.target_port", "33"),
   203  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.selector.%", "1"),
   204  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.selector.App", "MyApp"),
   205  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.session_affinity", "ClientIP"),
   206  					resource.TestCheckResourceAttr("kubernetes_service.test", "spec.0.type", "NodePort"),
   207  					testAccCheckServicePorts(&conf, []api.ServicePort{
   208  						{
   209  							Name:       "first",
   210  							Port:       int32(10222),
   211  							Protocol:   api.ProtocolTCP,
   212  							TargetPort: intstr.FromInt(22),
   213  						},
   214  						{
   215  							Name:       "second",
   216  							Port:       int32(10333),
   217  							Protocol:   api.ProtocolTCP,
   218  							TargetPort: intstr.FromInt(33),
   219  						},
   220  					}),
   221  				),
   222  			},
   223  		},
   224  	})
   225  }
   226  
   227  func TestAccKubernetesService_importBasic(t *testing.T) {
   228  	resourceName := "kubernetes_service.test"
   229  	name := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
   230  
   231  	resource.Test(t, resource.TestCase{
   232  		PreCheck:     func() { testAccPreCheck(t) },
   233  		Providers:    testAccProviders,
   234  		CheckDestroy: testAccCheckKubernetesServiceDestroy,
   235  		Steps: []resource.TestStep{
   236  			{
   237  				Config: testAccKubernetesServiceConfig_basic(name),
   238  			},
   239  
   240  			{
   241  				ResourceName:      resourceName,
   242  				ImportState:       true,
   243  				ImportStateVerify: true,
   244  			},
   245  		},
   246  	})
   247  }
   248  
   249  func TestAccKubernetesService_generatedName(t *testing.T) {
   250  	var conf api.Service
   251  	prefix := "tf-acc-test-gen-"
   252  
   253  	resource.Test(t, resource.TestCase{
   254  		PreCheck:      func() { testAccPreCheck(t) },
   255  		IDRefreshName: "kubernetes_service.test",
   256  		Providers:     testAccProviders,
   257  		CheckDestroy:  testAccCheckKubernetesServiceDestroy,
   258  		Steps: []resource.TestStep{
   259  			{
   260  				Config: testAccKubernetesServiceConfig_generatedName(prefix),
   261  				Check: resource.ComposeAggregateTestCheckFunc(
   262  					testAccCheckKubernetesServiceExists("kubernetes_service.test", &conf),
   263  					resource.TestCheckResourceAttr("kubernetes_service.test", "metadata.0.annotations.%", "0"),
   264  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   265  					resource.TestCheckResourceAttr("kubernetes_service.test", "metadata.0.labels.%", "0"),
   266  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
   267  					resource.TestCheckResourceAttr("kubernetes_service.test", "metadata.0.generate_name", prefix),
   268  					resource.TestMatchResourceAttr("kubernetes_service.test", "metadata.0.name", regexp.MustCompile("^"+prefix)),
   269  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.generation"),
   270  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.resource_version"),
   271  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.self_link"),
   272  					resource.TestCheckResourceAttrSet("kubernetes_service.test", "metadata.0.uid"),
   273  				),
   274  			},
   275  		},
   276  	})
   277  }
   278  
   279  func TestAccKubernetesService_importGeneratedName(t *testing.T) {
   280  	resourceName := "kubernetes_service.test"
   281  	prefix := "tf-acc-test-gen-import-"
   282  
   283  	resource.Test(t, resource.TestCase{
   284  		PreCheck:     func() { testAccPreCheck(t) },
   285  		Providers:    testAccProviders,
   286  		CheckDestroy: testAccCheckKubernetesServiceDestroy,
   287  		Steps: []resource.TestStep{
   288  			{
   289  				Config: testAccKubernetesServiceConfig_generatedName(prefix),
   290  			},
   291  
   292  			{
   293  				ResourceName:      resourceName,
   294  				ImportState:       true,
   295  				ImportStateVerify: true,
   296  			},
   297  		},
   298  	})
   299  }
   300  
   301  func testAccCheckServicePorts(svc *api.Service, expected []api.ServicePort) resource.TestCheckFunc {
   302  	return func(s *terraform.State) error {
   303  		if len(expected) == 0 && len(svc.Spec.Ports) == 0 {
   304  			return nil
   305  		}
   306  
   307  		ports := svc.Spec.Ports
   308  
   309  		// Ignore NodePorts as these are assigned randomly
   310  		for k, _ := range ports {
   311  			ports[k].NodePort = 0
   312  		}
   313  
   314  		if !reflect.DeepEqual(ports, expected) {
   315  			return fmt.Errorf("Service ports don't match.\nExpected: %#v\nGiven: %#v",
   316  				expected, svc.Spec.Ports)
   317  		}
   318  
   319  		return nil
   320  	}
   321  }
   322  
   323  func testAccCheckKubernetesServiceDestroy(s *terraform.State) error {
   324  	conn := testAccProvider.Meta().(*kubernetes.Clientset)
   325  
   326  	for _, rs := range s.RootModule().Resources {
   327  		if rs.Type != "kubernetes_service" {
   328  			continue
   329  		}
   330  		namespace, name := idParts(rs.Primary.ID)
   331  		resp, err := conn.CoreV1().Services(namespace).Get(name)
   332  		if err == nil {
   333  			if resp.Name == rs.Primary.ID {
   334  				return fmt.Errorf("Service still exists: %s", rs.Primary.ID)
   335  			}
   336  		}
   337  	}
   338  
   339  	return nil
   340  }
   341  
   342  func testAccCheckKubernetesServiceExists(n string, obj *api.Service) resource.TestCheckFunc {
   343  	return func(s *terraform.State) error {
   344  		rs, ok := s.RootModule().Resources[n]
   345  		if !ok {
   346  			return fmt.Errorf("Not found: %s", n)
   347  		}
   348  
   349  		conn := testAccProvider.Meta().(*kubernetes.Clientset)
   350  		namespace, name := idParts(rs.Primary.ID)
   351  		out, err := conn.CoreV1().Services(namespace).Get(name)
   352  		if err != nil {
   353  			return err
   354  		}
   355  
   356  		*obj = *out
   357  		return nil
   358  	}
   359  }
   360  
   361  func testAccKubernetesServiceConfig_basic(name string) string {
   362  	return fmt.Sprintf(`
   363  resource "kubernetes_service" "test" {
   364  	metadata {
   365  		annotations {
   366  			TestAnnotationOne = "one"
   367  			TestAnnotationTwo = "two"
   368  		}
   369  		labels {
   370  			TestLabelOne = "one"
   371  			TestLabelTwo = "two"
   372  			TestLabelThree = "three"
   373  		}
   374  		name = "%s"
   375  	}
   376  	spec {
   377  		port {
   378  			port = 8080
   379  			target_port = 80
   380  		}
   381  	}
   382  }`, name)
   383  }
   384  
   385  func testAccKubernetesServiceConfig_modified(name string) string {
   386  	return fmt.Sprintf(`
   387  resource "kubernetes_service" "test" {
   388  	metadata {
   389  		annotations {
   390  			TestAnnotationOne = "one"
   391  			Different = "1234"
   392  		}
   393  		labels {
   394  			TestLabelOne = "one"
   395  			TestLabelThree = "three"
   396  		}
   397  		name = "%s"
   398  	}
   399  	spec {
   400  		port {
   401  			port = 8081
   402  			target_port = 80
   403  		}
   404  	}
   405  }`, name)
   406  }
   407  
   408  func testAccKubernetesServiceConfig_loadBalancer(name string) string {
   409  	return fmt.Sprintf(`
   410  resource "kubernetes_service" "test" {
   411  	metadata {
   412  		name = "%s"
   413  	}
   414  	spec {
   415  		external_name = "ext-name-%s"
   416  		external_ips = ["10.0.0.3", "10.0.0.4"]
   417  		load_balancer_ip = "12.0.0.120"
   418  		load_balancer_source_ranges = ["10.0.0.5/32", "10.0.0.6/32"]
   419  		selector {
   420  			App = "MyApp"
   421  		}
   422  		session_affinity = "ClientIP"
   423  		port {
   424  			port = 8888
   425  			target_port = 80
   426  		}
   427  		type = "LoadBalancer"
   428  	}
   429  }`, name, name)
   430  }
   431  
   432  func testAccKubernetesServiceConfig_loadBalancer_modified(name string) string {
   433  	return fmt.Sprintf(`
   434  resource "kubernetes_service" "test" {
   435  	metadata {
   436  		name = "%s"
   437  	}
   438  	spec {
   439  		external_name = "ext-name-modified-%s"
   440  		external_ips = ["10.0.0.4", "10.0.0.5"]
   441  		load_balancer_ip = "12.0.0.125"
   442  		load_balancer_source_ranges = ["10.0.0.1/32", "10.0.0.2/32"]
   443  		selector {
   444  			App = "MyModifiedApp"
   445  			NewSelector = "NewValue"
   446  		}
   447  		session_affinity = "ClientIP"
   448  		port {
   449  			port = 9999
   450  			target_port = 81
   451  		}
   452  		type = "LoadBalancer"
   453  	}
   454  }`, name, name)
   455  }
   456  
   457  func testAccKubernetesServiceConfig_nodePort(name string) string {
   458  	return fmt.Sprintf(`
   459  resource "kubernetes_service" "test" {
   460  	metadata {
   461  		name = "%s"
   462  	}
   463  	spec {
   464  		external_name = "ext-name-%s"
   465  		external_ips = ["10.0.0.4", "10.0.0.5"]
   466  		load_balancer_ip = "12.0.0.125"
   467  		selector {
   468  			App = "MyApp"
   469  		}
   470  		session_affinity = "ClientIP"
   471  		port {
   472  			name = "first"
   473  			port = 10222
   474  			target_port = 22
   475  		}
   476  		port {
   477  			name = "second"
   478  			port = 10333
   479  			target_port = 33
   480  		}
   481  		type = "NodePort"
   482  	}
   483  }`, name, name)
   484  }
   485  
   486  func testAccKubernetesServiceConfig_generatedName(prefix string) string {
   487  	return fmt.Sprintf(`
   488  resource "kubernetes_service" "test" {
   489  	metadata {
   490  		generate_name = "%s"
   491  	}
   492  	spec {
   493  		port {
   494  			port = 8080
   495  			target_port = 80
   496  		}
   497  	}
   498  }`, prefix)
   499  }