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