github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/builtin/providers/kubernetes/resource_kubernetes_resource_quota_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/api/v1"
    11  	kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
    12  )
    13  
    14  func TestAccKubernetesResourceQuota_basic(t *testing.T) {
    15  	var conf api.ResourceQuota
    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_resource_quota.test",
    21  		Providers:     testAccProviders,
    22  		CheckDestroy:  testAccCheckKubernetesResourceQuotaDestroy,
    23  		Steps: []resource.TestStep{
    24  			{
    25  				Config: testAccKubernetesResourceQuotaConfig_basic(name),
    26  				Check: resource.ComposeAggregateTestCheckFunc(
    27  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
    28  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "1"),
    29  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationOne", "one"),
    30  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one"}),
    31  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "3"),
    32  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelOne", "one"),
    33  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelThree", "three"),
    34  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelFour", "four"),
    35  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelThree": "three", "TestLabelFour": "four"}),
    36  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name),
    37  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
    38  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
    39  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
    40  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
    41  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "3"),
    42  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "2"),
    43  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "2Gi"),
    44  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "4"),
    45  				),
    46  			},
    47  			{
    48  				Config: testAccKubernetesResourceQuotaConfig_metaModified(name),
    49  				Check: resource.ComposeAggregateTestCheckFunc(
    50  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
    51  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "2"),
    52  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationOne", "one"),
    53  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationTwo", "two"),
    54  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "TestAnnotationTwo": "two"}),
    55  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "3"),
    56  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelOne", "one"),
    57  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelTwo", "two"),
    58  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelThree", "three"),
    59  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelTwo": "two", "TestLabelThree": "three"}),
    60  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name),
    61  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
    62  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
    63  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
    64  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
    65  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "3"),
    66  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "2"),
    67  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "2Gi"),
    68  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "4"),
    69  				),
    70  			},
    71  			{
    72  				Config: testAccKubernetesResourceQuotaConfig_specModified(name),
    73  				Check: resource.ComposeAggregateTestCheckFunc(
    74  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
    75  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"),
    76  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
    77  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"),
    78  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
    79  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name),
    80  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
    81  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
    82  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
    83  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
    84  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "4"),
    85  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "4"),
    86  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.requests.cpu", "1"),
    87  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "4Gi"),
    88  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"),
    89  				),
    90  			},
    91  		},
    92  	})
    93  }
    94  
    95  func TestAccKubernetesResourceQuota_generatedName(t *testing.T) {
    96  	var conf api.ResourceQuota
    97  	prefix := "tf-acc-test-"
    98  
    99  	resource.Test(t, resource.TestCase{
   100  		PreCheck:      func() { testAccPreCheck(t) },
   101  		IDRefreshName: "kubernetes_resource_quota.test",
   102  		Providers:     testAccProviders,
   103  		CheckDestroy:  testAccCheckKubernetesResourceQuotaDestroy,
   104  		Steps: []resource.TestStep{
   105  			{
   106  				Config: testAccKubernetesResourceQuotaConfig_generatedName(prefix),
   107  				Check: resource.ComposeAggregateTestCheckFunc(
   108  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
   109  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"),
   110  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   111  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"),
   112  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
   113  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.generate_name", prefix),
   114  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
   115  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
   116  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
   117  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
   118  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"),
   119  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"),
   120  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "0"),
   121  				),
   122  			},
   123  		},
   124  	})
   125  }
   126  
   127  func TestAccKubernetesResourceQuota_withScopes(t *testing.T) {
   128  	var conf api.ResourceQuota
   129  	name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10))
   130  
   131  	resource.Test(t, resource.TestCase{
   132  		PreCheck:      func() { testAccPreCheck(t) },
   133  		IDRefreshName: "kubernetes_resource_quota.test",
   134  		Providers:     testAccProviders,
   135  		CheckDestroy:  testAccCheckKubernetesResourceQuotaDestroy,
   136  		Steps: []resource.TestStep{
   137  			{
   138  				Config: testAccKubernetesResourceQuotaConfig_withScopes(name),
   139  				Check: resource.ComposeAggregateTestCheckFunc(
   140  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
   141  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"),
   142  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   143  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"),
   144  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
   145  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name),
   146  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
   147  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
   148  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
   149  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
   150  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"),
   151  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"),
   152  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "1"),
   153  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.193563370", "BestEffort"),
   154  				),
   155  			},
   156  			{
   157  				Config: testAccKubernetesResourceQuotaConfig_withScopesModified(name),
   158  				Check: resource.ComposeAggregateTestCheckFunc(
   159  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
   160  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"),
   161  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   162  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"),
   163  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
   164  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name),
   165  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
   166  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
   167  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
   168  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
   169  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"),
   170  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"),
   171  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "1"),
   172  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.3022121741", "NotBestEffort"),
   173  				),
   174  			},
   175  		},
   176  	})
   177  }
   178  
   179  func TestAccKubernetesResourceQuota_importBasic(t *testing.T) {
   180  	resourceName := "kubernetes_resource_quota.test"
   181  	name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10))
   182  
   183  	resource.Test(t, resource.TestCase{
   184  		PreCheck:     func() { testAccPreCheck(t) },
   185  		Providers:    testAccProviders,
   186  		CheckDestroy: testAccCheckKubernetesResourceQuotaDestroy,
   187  		Steps: []resource.TestStep{
   188  			{
   189  				Config: testAccKubernetesResourceQuotaConfig_basic(name),
   190  			},
   191  			{
   192  				ResourceName:      resourceName,
   193  				ImportState:       true,
   194  				ImportStateVerify: true,
   195  			},
   196  		},
   197  	})
   198  }
   199  
   200  func testAccCheckKubernetesResourceQuotaDestroy(s *terraform.State) error {
   201  	conn := testAccProvider.Meta().(*kubernetes.Clientset)
   202  
   203  	for _, rs := range s.RootModule().Resources {
   204  		if rs.Type != "kubernetes_resource_quota" {
   205  			continue
   206  		}
   207  		namespace, name := idParts(rs.Primary.ID)
   208  		resp, err := conn.CoreV1().ResourceQuotas(namespace).Get(name)
   209  		if err == nil {
   210  			if resp.Namespace == namespace && resp.Name == name {
   211  				return fmt.Errorf("Resource Quota still exists: %s", rs.Primary.ID)
   212  			}
   213  		}
   214  	}
   215  
   216  	return nil
   217  }
   218  
   219  func testAccCheckKubernetesResourceQuotaExists(n string, obj *api.ResourceQuota) resource.TestCheckFunc {
   220  	return func(s *terraform.State) error {
   221  		rs, ok := s.RootModule().Resources[n]
   222  		if !ok {
   223  			return fmt.Errorf("Not found: %s", n)
   224  		}
   225  
   226  		conn := testAccProvider.Meta().(*kubernetes.Clientset)
   227  		namespace, name := idParts(rs.Primary.ID)
   228  		out, err := conn.CoreV1().ResourceQuotas(namespace).Get(name)
   229  		if err != nil {
   230  			return err
   231  		}
   232  
   233  		*obj = *out
   234  		return nil
   235  	}
   236  }
   237  
   238  func testAccKubernetesResourceQuotaConfig_basic(name string) string {
   239  	return fmt.Sprintf(`
   240  resource "kubernetes_resource_quota" "test" {
   241  	metadata {
   242  		annotations {
   243  			TestAnnotationOne = "one"
   244  		}
   245  		labels {
   246  			TestLabelOne = "one"
   247  			TestLabelThree = "three"
   248  			TestLabelFour = "four"
   249  		}
   250  		name = "%s"
   251  	}
   252  	spec {
   253  		hard {
   254  			"limits.cpu" = 2
   255  			"limits.memory" = "2Gi"
   256  			pods = 4
   257  		}
   258  	}
   259  }
   260  `, name)
   261  }
   262  
   263  func testAccKubernetesResourceQuotaConfig_metaModified(name string) string {
   264  	return fmt.Sprintf(`
   265  resource "kubernetes_resource_quota" "test" {
   266  	metadata {
   267  		annotations {
   268  			TestAnnotationOne = "one"
   269  			TestAnnotationTwo = "two"
   270  		}
   271  		labels {
   272  			TestLabelOne = "one"
   273  			TestLabelTwo = "two"
   274  			TestLabelThree = "three"
   275  		}
   276  		name = "%s"
   277  	}
   278  	spec {
   279  		hard {
   280  			"limits.cpu" = 2
   281  			"limits.memory" = "2Gi"
   282  			pods = 4
   283  		}
   284  	}
   285  }
   286  `, name)
   287  }
   288  
   289  func testAccKubernetesResourceQuotaConfig_specModified(name string) string {
   290  	return fmt.Sprintf(`
   291  resource "kubernetes_resource_quota" "test" {
   292  	metadata {
   293  		name = "%s"
   294  	}
   295  	spec {
   296  		hard {
   297  			"limits.cpu" = 4
   298  			"requests.cpu" = 1
   299  			"limits.memory" = "4Gi"
   300  			pods = 10
   301  		}
   302  	}
   303  }
   304  `, name)
   305  }
   306  
   307  func testAccKubernetesResourceQuotaConfig_generatedName(prefix string) string {
   308  	return fmt.Sprintf(`
   309  resource "kubernetes_resource_quota" "test" {
   310  	metadata {
   311  		generate_name = "%s"
   312  	}
   313  	spec {
   314  		hard {
   315  			pods = 10
   316  		}
   317  	}
   318  }
   319  `, prefix)
   320  }
   321  
   322  func testAccKubernetesResourceQuotaConfig_withScopes(name string) string {
   323  	return fmt.Sprintf(`
   324  resource "kubernetes_resource_quota" "test" {
   325  	metadata {
   326  		name = "%s"
   327  	}
   328  	spec {
   329  		hard {
   330  			pods = 10
   331  		}
   332  		scopes = ["BestEffort"]
   333  	}
   334  }
   335  `, name)
   336  }
   337  
   338  func testAccKubernetesResourceQuotaConfig_withScopesModified(name string) string {
   339  	return fmt.Sprintf(`
   340  resource "kubernetes_resource_quota" "test" {
   341  	metadata {
   342  		name = "%s"
   343  	}
   344  	spec {
   345  		hard {
   346  			pods = 10
   347  		}
   348  		scopes = ["NotBestEffort"]
   349  	}
   350  }
   351  `, name)
   352  }