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

     1  package kubernetes
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/acctest"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  	api "k8s.io/kubernetes/pkg/apis/autoscaling/v1"
    11  	kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
    12  )
    13  
    14  func TestAccKubernetesHorizontalPodAutoscaler_basic(t *testing.T) {
    15  	var conf api.HorizontalPodAutoscaler
    16  	name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10))
    17  
    18  	resource.Test(t, resource.TestCase{
    19  		PreCheck:      func() { testAccPreCheck(t) },
    20  		IDRefreshName: "kubernetes_horizontal_pod_autoscaler.test",
    21  		Providers:     testAccProviders,
    22  		CheckDestroy:  testAccCheckKubernetesHorizontalPodAutoscalerDestroy,
    23  		Steps: []resource.TestStep{
    24  			{
    25  				Config: testAccKubernetesHorizontalPodAutoscalerConfig_basic(name),
    26  				Check: resource.ComposeAggregateTestCheckFunc(
    27  					testAccCheckKubernetesHorizontalPodAutoscalerExists("kubernetes_horizontal_pod_autoscaler.test", &conf),
    28  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.%", "1"),
    29  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.TestAnnotationOne", "one"),
    30  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one"}),
    31  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.%", "3"),
    32  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelOne", "one"),
    33  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelThree", "three"),
    34  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelFour", "four"),
    35  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelThree": "three", "TestLabelFour": "four"}),
    36  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.name", name),
    37  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.generation"),
    38  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.resource_version"),
    39  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.self_link"),
    40  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.uid"),
    41  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.#", "1"),
    42  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.max_replicas", "10"),
    43  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.min_replicas", "1"),
    44  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.#", "1"),
    45  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.kind", "ReplicationController"),
    46  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.name", "TerraformAccTest"),
    47  				),
    48  			},
    49  			{
    50  				Config: testAccKubernetesHorizontalPodAutoscalerConfig_metaModified(name),
    51  				Check: resource.ComposeAggregateTestCheckFunc(
    52  					testAccCheckKubernetesHorizontalPodAutoscalerExists("kubernetes_horizontal_pod_autoscaler.test", &conf),
    53  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.%", "2"),
    54  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.TestAnnotationOne", "one"),
    55  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.TestAnnotationTwo", "two"),
    56  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "TestAnnotationTwo": "two"}),
    57  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.%", "3"),
    58  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelOne", "one"),
    59  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelTwo", "two"),
    60  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelThree", "three"),
    61  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelTwo": "two", "TestLabelThree": "three"}),
    62  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.name", name),
    63  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.generation"),
    64  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.resource_version"),
    65  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.self_link"),
    66  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.uid"),
    67  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.#", "1"),
    68  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.max_replicas", "10"),
    69  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.min_replicas", "1"),
    70  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.#", "1"),
    71  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.kind", "ReplicationController"),
    72  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.name", "TerraformAccTest"),
    73  				),
    74  			},
    75  			{
    76  				Config: testAccKubernetesHorizontalPodAutoscalerConfig_specModified(name),
    77  				Check: resource.ComposeAggregateTestCheckFunc(
    78  					testAccCheckKubernetesHorizontalPodAutoscalerExists("kubernetes_horizontal_pod_autoscaler.test", &conf),
    79  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.%", "0"),
    80  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
    81  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.%", "0"),
    82  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
    83  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.name", name),
    84  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.generation"),
    85  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.resource_version"),
    86  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.self_link"),
    87  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.uid"),
    88  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.#", "1"),
    89  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.max_replicas", "8"),
    90  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.min_replicas", "1"),
    91  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.#", "1"),
    92  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.kind", "ReplicationController"),
    93  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.name", "TerraformAccTestModified"),
    94  				),
    95  			},
    96  		},
    97  	})
    98  }
    99  
   100  func TestAccKubernetesHorizontalPodAutoscaler_generatedName(t *testing.T) {
   101  	var conf api.HorizontalPodAutoscaler
   102  	prefix := "tf-acc-test-"
   103  
   104  	resource.Test(t, resource.TestCase{
   105  		PreCheck:      func() { testAccPreCheck(t) },
   106  		IDRefreshName: "kubernetes_horizontal_pod_autoscaler.test",
   107  		Providers:     testAccProviders,
   108  		CheckDestroy:  testAccCheckKubernetesHorizontalPodAutoscalerDestroy,
   109  		Steps: []resource.TestStep{
   110  			{
   111  				Config: testAccKubernetesHorizontalPodAutoscalerConfig_generatedName(prefix),
   112  				Check: resource.ComposeAggregateTestCheckFunc(
   113  					testAccCheckKubernetesHorizontalPodAutoscalerExists("kubernetes_horizontal_pod_autoscaler.test", &conf),
   114  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.%", "0"),
   115  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   116  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.%", "0"),
   117  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
   118  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.generate_name", prefix),
   119  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.generation"),
   120  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.resource_version"),
   121  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.self_link"),
   122  					resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.uid"),
   123  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.#", "1"),
   124  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.max_replicas", "1"),
   125  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.min_replicas", "1"),
   126  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.#", "1"),
   127  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.kind", "ReplicationController"),
   128  					resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.name", "TerraformAccTestGeneratedName"),
   129  				),
   130  			},
   131  		},
   132  	})
   133  }
   134  
   135  func TestAccKubernetesHorizontalPodAutoscaler_importBasic(t *testing.T) {
   136  	resourceName := "kubernetes_horizontal_pod_autoscaler.test"
   137  	name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10))
   138  
   139  	resource.Test(t, resource.TestCase{
   140  		PreCheck:     func() { testAccPreCheck(t) },
   141  		Providers:    testAccProviders,
   142  		CheckDestroy: testAccCheckKubernetesHorizontalPodAutoscalerDestroy,
   143  		Steps: []resource.TestStep{
   144  			{
   145  				Config: testAccKubernetesHorizontalPodAutoscalerConfig_basic(name),
   146  			},
   147  			{
   148  				ResourceName:      resourceName,
   149  				ImportState:       true,
   150  				ImportStateVerify: true,
   151  			},
   152  		},
   153  	})
   154  }
   155  
   156  func testAccCheckKubernetesHorizontalPodAutoscalerDestroy(s *terraform.State) error {
   157  	conn := testAccProvider.Meta().(*kubernetes.Clientset)
   158  
   159  	for _, rs := range s.RootModule().Resources {
   160  		if rs.Type != "kubernetes_horizontal_pod_autoscaler" {
   161  			continue
   162  		}
   163  		namespace, name := idParts(rs.Primary.ID)
   164  		resp, err := conn.AutoscalingV1().HorizontalPodAutoscalers(namespace).Get(name)
   165  		if err == nil {
   166  			if resp.Namespace == namespace && resp.Name == name {
   167  				return fmt.Errorf("Horizontal Pod Autoscaler still exists: %s", rs.Primary.ID)
   168  			}
   169  		}
   170  	}
   171  
   172  	return nil
   173  }
   174  
   175  func testAccCheckKubernetesHorizontalPodAutoscalerExists(n string, obj *api.HorizontalPodAutoscaler) resource.TestCheckFunc {
   176  	return func(s *terraform.State) error {
   177  		rs, ok := s.RootModule().Resources[n]
   178  		if !ok {
   179  			return fmt.Errorf("Not found: %s", n)
   180  		}
   181  
   182  		conn := testAccProvider.Meta().(*kubernetes.Clientset)
   183  		namespace, name := idParts(rs.Primary.ID)
   184  		out, err := conn.AutoscalingV1().HorizontalPodAutoscalers(namespace).Get(name)
   185  		if err != nil {
   186  			return err
   187  		}
   188  
   189  		*obj = *out
   190  		return nil
   191  	}
   192  }
   193  
   194  func testAccKubernetesHorizontalPodAutoscalerConfig_basic(name string) string {
   195  	return fmt.Sprintf(`
   196  resource "kubernetes_horizontal_pod_autoscaler" "test" {
   197  	metadata {
   198  		annotations {
   199  			TestAnnotationOne = "one"
   200  		}
   201  		labels {
   202  			TestLabelOne = "one"
   203  			TestLabelThree = "three"
   204  			TestLabelFour = "four"
   205  		}
   206  		name = "%s"
   207  	}
   208  	spec {
   209  		max_replicas = 10
   210  		scale_target_ref {
   211  			kind = "ReplicationController"
   212  			name = "TerraformAccTest"
   213  		}
   214  	}
   215  }
   216  `, name)
   217  }
   218  
   219  func testAccKubernetesHorizontalPodAutoscalerConfig_metaModified(name string) string {
   220  	return fmt.Sprintf(`
   221  resource "kubernetes_horizontal_pod_autoscaler" "test" {
   222  	metadata {
   223  		annotations {
   224  			TestAnnotationOne = "one"
   225  			TestAnnotationTwo = "two"
   226  		}
   227  		labels {
   228  			TestLabelOne = "one"
   229  			TestLabelTwo = "two"
   230  			TestLabelThree = "three"
   231  		}
   232  		name = "%s"
   233  	}
   234  	spec {
   235  		max_replicas = 10
   236  		scale_target_ref {
   237  			kind = "ReplicationController"
   238  			name = "TerraformAccTest"
   239  		}
   240  	}
   241  }
   242  `, name)
   243  }
   244  
   245  func testAccKubernetesHorizontalPodAutoscalerConfig_specModified(name string) string {
   246  	return fmt.Sprintf(`
   247  resource "kubernetes_horizontal_pod_autoscaler" "test" {
   248  	metadata {
   249  		name = "%s"
   250  	}
   251  	spec {
   252  		max_replicas = 8
   253  		scale_target_ref {
   254  			kind = "ReplicationController"
   255  			name = "TerraformAccTestModified"
   256  		}
   257  	}
   258  }
   259  `, name)
   260  }
   261  
   262  func testAccKubernetesHorizontalPodAutoscalerConfig_generatedName(prefix string) string {
   263  	return fmt.Sprintf(`
   264  resource "kubernetes_horizontal_pod_autoscaler" "test" {
   265  	metadata {
   266  		generate_name = "%s"
   267  	}
   268  	spec {
   269  		max_replicas = 1
   270  		scale_target_ref {
   271  			kind = "ReplicationController"
   272  			name = "TerraformAccTestGeneratedName"
   273  		}
   274  	}
   275  }
   276  `, prefix)
   277  }