Skip to content

Commit 731ab78

Browse files
committed
wip
1 parent 279bc18 commit 731ab78

File tree

6 files changed

+100
-60
lines changed

6 files changed

+100
-60
lines changed

_examples/gke/gke-cluster/main.tf

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
provider "google" {
2-
# Provider is configured using environment variables: GOOGLE_REGION, GOOGLE_PROJECT, GOOGLE_CREDENTIALS.
3-
# This can be set statically, if preferred. See docs for details.
4-
# https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#full-reference
5-
}
6-
71
# This is used to set local variable google_zone.
82
# This can be replaced with a statically-configured zone, if preferred.
93
data "google_compute_zones" "available" {

_examples/gke/kubernetes-config/main.tf

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,3 @@
1-
# Configure kubernetes provider with Oauth2 access token.
2-
# https://registry.terraform.io/providers/hashicorp/google/latest/docs/data-sources/client_config
3-
# This fetches a new token, which will expire in 1 hour.
4-
data "google_client_config" "default" {
5-
}
6-
7-
provider "kubernetes" {
8-
host = var.cluster_endpoint
9-
token = data.google_client_config.default.access_token
10-
cluster_ca_certificate = base64decode(var.cluster_ca_cert)
11-
}
12-
131
resource "kubernetes_namespace" "test" {
142
metadata {
153
name = "test"
@@ -55,14 +43,6 @@ resource "kubernetes_deployment" "test" {
5543
}
5644
}
5745

58-
provider "helm" {
59-
kubernetes {
60-
host = var.cluster_endpoint
61-
token = data.google_client_config.default.access_token
62-
cluster_ca_certificate = base64decode(var.cluster_ca_cert)
63-
}
64-
}
65-
6646
resource helm_release nginx_ingress {
6747
name = "nginx-ingress-controller"
6848

@@ -82,12 +62,11 @@ data "template_file" "kubeconfig" {
8262
cluster_name = var.cluster_name
8363
endpoint = var.cluster_endpoint
8464
cluster_ca = var.cluster_ca_cert
85-
cluster_token = data.google_client_config.default.access_token
65+
cluster_token = var.cluster_token
8666
}
8767
}
8868

8969
resource "local_file" "kubeconfig" {
90-
depends_on = [var.cluster_id]
9170
content = data.template_file.kubeconfig.rendered
9271
filename = "${path.root}/kubeconfig"
9372
}

_examples/gke/kubernetes-config/variables.tf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,6 @@ variable "cluster_ca_cert" {
1414
type = string
1515
}
1616

17+
variable "cluster_token" {
18+
type = string
19+
}

_examples/gke/main.tf

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ terraform {
22
required_providers {
33
kubernetes = {
44
source = "hashicorp/kubernetes"
5-
version = ">= 2.0.0"
5+
version = ">= 2.0.1"
66
}
77
google = {
88
source = "hashicorp/google"
@@ -15,22 +15,53 @@ terraform {
1515
}
1616
}
1717

18-
resource "random_id" "cluster_name" {
19-
byte_length = 5
18+
# Provider is configured using environment variables: GOOGLE_REGION, GOOGLE_PROJECT, GOOGLE_CREDENTIALS.
19+
# This can be set statically, if preferred. See docs for details.
20+
# https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#full-reference
21+
provider "google" {}
22+
23+
# Configure kubernetes provider with Oauth2 access token.
24+
# https://registry.terraform.io/providers/hashicorp/google/latest/docs/data-sources/client_config
25+
# This fetches a new token, which will expire in 1 hour.
26+
data "google_client_config" "default" {
27+
depends_on = [module.gke-cluster.cluster_id]
28+
}
29+
30+
data "google_container_cluster" "default" {
31+
name = local.cluster_name
32+
depends_on = [module.gke-cluster.cluster_id]
2033
}
2134

22-
locals {
23-
cluster_name = "tf-k8s-${random_id.cluster_name.hex}"
35+
provider "kubernetes" {
36+
host = "https://${data.google_container_cluster.default.endpoint}"
37+
token = data.google_client_config.default.access_token
38+
cluster_ca_certificate = base64decode(
39+
data.google_container_cluster.default.master_auth[0].cluster_ca_certificate,
40+
)
41+
}
42+
43+
provider "helm" {
44+
kubernetes {
45+
host = "https://${data.google_container_cluster.default.endpoint}"
46+
token = data.google_client_config.default.access_token
47+
cluster_ca_certificate = base64decode(
48+
data.google_container_cluster.default.master_auth[0].cluster_ca_certificate,
49+
)
50+
}
2451
}
2552

2653
module "gke-cluster" {
54+
providers = { google = google }
2755
source = "./gke-cluster"
2856
cluster_name = local.cluster_name
2957
}
3058

3159
module "kubernetes-config" {
60+
depends_on = [module.gke-cluster]
61+
providers = { kubernetes = kubernetes, helm = helm }
3262
source = "./kubernetes-config"
33-
cluster_name = module.gke-cluster.cluster_name
63+
cluster_name = local.cluster_name
64+
cluster_token = data.google_client_config.default.access_token
3465
cluster_id = module.gke-cluster.cluster_id # creates dependency on cluster creation
3566
cluster_endpoint = module.gke-cluster.cluster_endpoint
3667
cluster_ca_cert = module.gke-cluster.cluster_ca_cert

_examples/gke/variables.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
resource "random_id" "cluster_name" {
2+
byte_length = 5
3+
}
4+
5+
locals {
6+
cluster_name = "tf-k8s-${random_id.cluster_name.hex}"
7+
}

kubernetes/provider_test.go

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,21 @@ func testAccPreCheckInternal(t *testing.T) {
222222
return
223223
}
224224

225+
// testAccPreCheckInternal_setEnv is used for internal testing where
226+
// specific environment variables are needed to configure the provider.
227+
func testAccPreCheckInternal_setEnv(t *testing.T, envVars map[string]string) {
228+
ctx := context.TODO()
229+
unsetEnv(t)
230+
for k, v := range envVars {
231+
os.Setenv(k, v)
232+
}
233+
diags := testAccProvider.Configure(ctx, terraform.NewResourceConfigRaw(nil))
234+
if diags.HasError() {
235+
t.Fatal(diags[0].Summary)
236+
}
237+
return
238+
}
239+
225240
func getClusterVersion() (*gversion.Version, error) {
226241
meta := testAccProvider.Meta()
227242

@@ -483,43 +498,54 @@ func TestAccKubernetesProvider_config_path(t *testing.T) {
483498
}
484499

485500
func TestAccKubernetesProvider_config_paths(t *testing.T) {
486-
wantError := `"config_path": conflicts with config_paths`
487-
488501
resource.Test(t, resource.TestCase{
489-
// Unset env vars to prevent them from being used in the test.
490502
PreCheck: func() { testAccPreCheckInternal(t) },
491503
ProviderFactories: testAccProviderFactoriesInternal,
492504
Steps: []resource.TestStep{
493505
{
494506
Config: testAccKubernetesProviderConfig(
495-
providerConfig_config_paths(`["./testdata/kubeconfig", "./testdata/kubeconfig"]`),
507+
providerConfig_config_paths(`["./missing/file", "./testdata/kubeconfig"]`),
496508
),
497-
Check: resource.TestCheckResourceAttr("data.kubernetes_namespace.test", "metadata.0.name", "default"),
509+
Check: resource.TestCheckResourceAttr("data.kubernetes_namespace.test", "metadata.0.name", "default"),
510+
ExpectError: regexp.MustCompile("could not open kubeconfig"),
498511
},
499512
{
500513
Config: testAccKubernetesProviderConfig(
501514
providerConfig_config_path("./internal/testdata/kubeconfig") +
502515
providerConfig_config_paths(`["./testdata/kubeconfig", "./testdata/kubeconfig"]`),
503516
),
504-
ExpectError: regexp.MustCompile(wantError),
517+
ExpectError: regexp.MustCompile(`"config_path": conflicts with config_paths`),
518+
},
519+
{
520+
Config: testAccKubernetesProviderConfig(
521+
providerConfig_config_paths(`["./testdata/kubeconfig", "./testdata/kubeconfig"]`),
522+
),
523+
Check: resource.TestCheckResourceAttr("data.kubernetes_namespace.test", "metadata.0.name", "default"),
505524
},
506525
},
507526
})
508527
}
509528

510529
func TestAccKubernetesProvider_config_paths_env(t *testing.T) {
511-
os.Setenv("KUBE_CONFIG_PATHS", strings.Join([]string{
512-
"./testdata/kubeconfig",
513-
"./testdata/kubeconfig",
514-
}, string(os.PathListSeparator)))
515530

516531
resource.Test(t, resource.TestCase{
517-
PreCheck: func() { testAccPreCheckInternal(t) },
532+
PreCheck: func() {
533+
testAccPreCheckInternal_setEnv(t, map[string]string{
534+
"KUBE_CONFIG_PATHS": strings.Join([]string{
535+
"./testdata/kubeconfig",
536+
"./testdata/kubeconfig",
537+
}, string(os.PathListSeparator)),
538+
})
539+
},
518540
ProviderFactories: testAccProviderFactoriesInternal,
519541
Steps: []resource.TestStep{
520542
{
521-
Config: testAccKubernetesProviderConfig("# empty"),
522-
Check: resource.TestCheckResourceAttr("data.kubernetes_namespace.test", "metadata.0.name", "default"),
543+
Config: testAccKubernetesProviderConfig("# empty"),
544+
PlanOnly: true,
545+
},
546+
{
547+
Config: testAccKubernetesProviderConfig("# empty"),
548+
PlanOnly: true,
523549
},
524550
},
525551
})
@@ -528,15 +554,15 @@ func TestAccKubernetesProvider_config_paths_env(t *testing.T) {
528554
func TestAccKubernetesProvider_config_paths_env_wantError(t *testing.T) {
529555
wantError := `"config_path": conflicts with config_paths`
530556

531-
unsetEnv(t)
532-
os.Setenv("KUBE_CONFIG_PATHS", strings.Join([]string{
533-
"testdata/kubeconfig",
534-
"testdata/kubeconfig",
535-
}, string(os.PathListSeparator)))
536-
537-
os.Setenv("KUBE_CONFIG_PATH", "testdata/kubeconfig")
538557
resource.Test(t, resource.TestCase{
539-
PreCheck: func() { testAccPreCheckInternal(t) },
558+
PreCheck: func() {
559+
testAccPreCheckInternal_setEnv(t, map[string]string{
560+
"KUBE_CONFIG_PATHS": strings.Join([]string{
561+
"./testdata/kubeconfig",
562+
"./testdata/kubeconfig",
563+
}, string(os.PathListSeparator)),
564+
})
565+
},
540566
ProviderFactories: testAccProviderFactoriesInternal,
541567
Steps: []resource.TestStep{
542568
{
@@ -554,11 +580,11 @@ func testAccKubernetesProviderConfig(providerConfig string) string {
554580
%s
555581
}
556582
557-
data kubernetes_namespace "test" {
558-
metadata {
559-
name = "default"
560-
}
561-
}
583+
#data kubernetes_namespace "test" {
584+
# metadata {
585+
# name = "default"
586+
# }
587+
#}
562588
`, providerConfig)
563589
}
564590

0 commit comments

Comments
 (0)