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