Skip to content

Commit 484112d

Browse files
dak1n1DrFaust92pdecat
authored
Fix PodSpec defaults and related acceptance tests (#1074)
* Remove deprecated replicationController spec. * Make PodSpec ForceNew more explicit. * Add make target for regression upgrade tests. * Standardize image versions used in acceptance tests to minimize docker pulls from dockerhub. * Ensure init container is always updatable. * Ensure mutable JobSpec fields are updatable. Co-authored-by: Ilia Lazebnik <[email protected]> Co-authored-by: Patrick Decat <[email protected]>
1 parent a763455 commit 484112d

32 files changed

+1356
-1512
lines changed

GNUmakefile

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ PKG_NAME := kubernetes
88
OS_ARCH := $(shell go env GOOS)_$(shell go env GOARCH)
99
TF_PROV_DOCS := $(PWD)/kubernetes/test-infra/tfproviderdocs
1010
EXT_PROV_DIR := $(PWD)/kubernetes/test-infra/external-providers
11+
EXT_PROV_BIN := /tmp/.terraform.d/localhost/test/kubernetes/9.9.9/$(OS_ARCH)/terraform-provider-kubernetes_9.9.9_$(OS_ARCH)
1112

1213
ifneq ($(PWD),$(PROVIDER_DIR))
1314
$(error "Makefile must be run from the provider directory")
1415
endif
1516

1617
default: build
1718

18-
all: build depscheck fmtcheck test testacc test-compile tests-lint tests-lint-fix tools vet website-lint website-lint-fix
19+
all: build depscheck fmtcheck test test-update testacc test-compile tests-lint tests-lint-fix tools vet website-lint website-lint-fix
1920

2021
build: fmtcheck
2122
go install
@@ -43,12 +44,11 @@ test: fmtcheck
4344
echo $(TEST) | \
4445
xargs -t -n4 go test $(TESTARGS) -timeout=30s -parallel=4
4546

46-
testacc: fmtcheck
47+
testacc: fmtcheck vet
4748
rm -rf $(EXT_PROV_DIR)/.terraform $(EXT_PROV_DIR)/.terraform.lock.hcl || true
4849
mkdir $(EXT_PROV_DIR)/.terraform
4950
mkdir -p /tmp/.terraform.d/localhost/test/kubernetes/9.9.9/$(OS_ARCH) || true
50-
go clean -cache
51-
go build -o /tmp/.terraform.d/localhost/test/kubernetes/9.9.9/$(OS_ARCH)/terraform-provider-kubernetes_9.9.9_$(OS_ARCH)
51+
ls $(EXT_PROV_BIN) || go build -o $(EXT_PROV_BIN)
5252
cd $(EXT_PROV_DIR) && TF_CLI_CONFIG_FILE=$(EXT_PROV_DIR)/.terraformrc TF_PLUGIN_CACHE_DIR=$(EXT_PROV_DIR)/.terraform terraform init -upgrade
5353
TF_CLI_CONFIG_FILE=$(EXT_PROV_DIR)/.terraformrc TF_PLUGIN_CACHE_DIR=$(EXT_PROV_DIR)/.terraform TF_ACC=1 go test $(TEST) -v $(TESTARGS) -timeout 120m
5454

@@ -73,6 +73,15 @@ tests-lint-fix: tools
7373
@find ./kubernetes -name "*_test.go" -exec sed -i ':a;N;$$!ba;s/fmt.Sprintf(`\n/fmt.Sprintf(`/g' '{}' \; # remove newlines for terrafmt
7474
@terrafmt fmt -f ./kubernetes --pattern '*_test.go'
7575

76+
test-update: fmtcheck vet
77+
rm -rf $(EXT_PROV_DIR)/.terraform $(EXT_PROV_DIR)/.terraform.lock.hcl || true
78+
mkdir $(EXT_PROV_DIR)/.terraform
79+
mkdir -p /tmp/.terraform.d/localhost/test/kubernetes/9.9.9/$(OS_ARCH) || true
80+
go clean -cache
81+
go build -o /tmp/.terraform.d/localhost/test/kubernetes/9.9.9/$(OS_ARCH)/terraform-provider-kubernetes_9.9.9_$(OS_ARCH)
82+
cd $(EXT_PROV_DIR) && TF_CLI_CONFIG_FILE=$(EXT_PROV_DIR)/.terraformrc TF_PLUGIN_CACHE_DIR=$(EXT_PROV_DIR)/.terraform terraform init -upgrade
83+
TF_CLI_CONFIG_FILE=$(EXT_PROV_DIR)/.terraformrc TF_PLUGIN_CACHE_DIR=$(EXT_PROV_DIR)/.terraform TF_ACC=1 go test $(TEST) -v -run 'regression' $(TESTARGS)
84+
7685
tools:
7786
go install github.com/bflad/tfproviderdocs
7887
go install github.com/client9/misspell/cmd/misspell

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ Please note: We take Terraform's security and our users' trust very seriously. I
2121
## Requirements
2222

2323
- [Terraform](https://www.terraform.io/downloads.html) 0.12.x
24-
- Note that version 0.11.x currently works, but is [deprecated](https://www.hashicorp.com/blog/deprecating-terraform-0-11-support-in-terraform-providers/)
25-
- [Go](https://golang.org/doc/install) 1.14.x (to build the provider plugin)
24+
- [Go](https://golang.org/doc/install) 1.15.x (to build the provider plugin)
2625

2726

2827
## Kubernetes Alpha Provider

kubernetes/data_source_kubernetes_pod.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
)
1111

1212
func dataSourceKubernetesPod() *schema.Resource {
13-
podSpecFields := podSpecFields(false, false, false)
13+
podSpecFields := podSpecFields(false, false)
1414
// Setting this default to false prevents a perpetual diff caused by volume_mounts
1515
// being mutated on the server side as Kubernetes automatically adds a mount
1616
// for the service account token

kubernetes/provider_test.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,15 @@ import (
1818
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1919
)
2020

21-
var testAccProviders map[string]*schema.Provider
21+
// Global constants for testing images (reduces the number of docker pulls).
22+
const (
23+
nginxImageVersion = "nginx:1.19.4"
24+
nginxImageVersion1 = "nginx:1.19.3"
25+
busyboxImageVersion = "busybox:1.32.0"
26+
busyboxImageVersion1 = "busybox:1.31"
27+
alpineImageVersion = "alpine:3.12.1"
28+
)
29+
2230
var testAccProvider *schema.Provider
2331
var testAccExternalProviders map[string]resource.ExternalProvider
2432
var testAccProviderFactories = map[string]func() (*schema.Provider, error){
@@ -29,9 +37,6 @@ var testAccProviderFactories = map[string]func() (*schema.Provider, error){
2937

3038
func init() {
3139
testAccProvider = Provider()
32-
testAccProviders = map[string]*schema.Provider{
33-
"kubernetes": testAccProvider,
34-
}
3540
testAccProviderFactories = map[string]func() (*schema.Provider, error){
3641
"kubernetes": func() (*schema.Provider, error) {
3742
return Provider(), nil

kubernetes/resource_kubernetes_affinity_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
func TestAccKubernetesPod_with_node_affinity_with_required_during_scheduling_ignored_during_execution(t *testing.T) {
1313
var conf api.Pod
1414
podName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
15-
imageName := "nginx:1.7.9"
15+
imageName := nginxImageVersion
1616
keyName := "spec.0.affinity.0.node_affinity.0.required_during_scheduling_ignored_during_execution"
1717

1818
resource.Test(t, resource.TestCase{
@@ -45,7 +45,7 @@ func TestAccKubernetesPod_with_node_affinity_with_required_during_scheduling_ign
4545
func TestAccKubernetesPod_with_node_affinity_with_preferred_during_scheduling_ignored_during_execution(t *testing.T) {
4646
var conf api.Pod
4747
podName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
48-
imageName := "nginx:1.7.9"
48+
imageName := nginxImageVersion
4949
keyName := "spec.0.affinity.0.node_affinity.0.preferred_during_scheduling_ignored_during_execution"
5050

5151
resource.Test(t, resource.TestCase{
@@ -82,7 +82,7 @@ func TestAccKubernetesPod_with_node_affinity_with_preferred_during_scheduling_ig
8282
func TestAccKubernetesPod_with_pod_affinity_with_required_during_scheduling_ignored_during_execution(t *testing.T) {
8383
var conf api.Pod
8484
podName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
85-
imageName := "nginx:1.7.9"
85+
imageName := nginxImageVersion
8686
keyName := "spec.0.affinity.0.pod_affinity.0.required_during_scheduling_ignored_during_execution"
8787

8888
resource.Test(t, resource.TestCase{
@@ -116,7 +116,7 @@ func TestAccKubernetesPod_with_pod_affinity_with_required_during_scheduling_igno
116116
func TestAccKubernetesPod_with_pod_affinity_with_preferred_during_scheduling_ignored_during_execution(t *testing.T) {
117117
var conf api.Pod
118118
podName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
119-
imageName := "nginx:1.7.9"
119+
imageName := nginxImageVersion
120120
keyName := "spec.0.affinity.0.pod_affinity.0.preferred_during_scheduling_ignored_during_execution"
121121

122122
resource.Test(t, resource.TestCase{
@@ -153,7 +153,7 @@ func TestAccKubernetesPod_with_pod_affinity_with_preferred_during_scheduling_ign
153153
func TestAccKubernetesPod_with_pod_anti_affinity_with_required_during_scheduling_ignored_during_execution(t *testing.T) {
154154
var conf api.Pod
155155
podName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
156-
imageName := "nginx:1.7.9"
156+
imageName := nginxImageVersion
157157
keyName := "spec.0.affinity.0.pod_anti_affinity.0.required_during_scheduling_ignored_during_execution"
158158

159159
resource.Test(t, resource.TestCase{
@@ -187,7 +187,7 @@ func TestAccKubernetesPod_with_pod_anti_affinity_with_required_during_scheduling
187187
func TestAccKubernetesPod_with_pod_anti_affinity_with_preferred_during_scheduling_ignored_during_execution(t *testing.T) {
188188
var conf api.Pod
189189
podName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
190-
imageName := "nginx:1.7.9"
190+
imageName := nginxImageVersion
191191
keyName := "spec.0.affinity.0.pod_anti_affinity.0.preferred_during_scheduling_ignored_during_execution"
192192

193193
resource.Test(t, resource.TestCase{

kubernetes/resource_kubernetes_cron_job_test.go

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
func TestAccKubernetesCronJob_basic(t *testing.T) {
1616
var conf v1beta1.CronJob
1717
name := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
18+
imageName := alpineImageVersion
1819

1920
resource.Test(t, resource.TestCase{
2021
PreCheck: func() { testAccPreCheck(t) },
@@ -23,7 +24,7 @@ func TestAccKubernetesCronJob_basic(t *testing.T) {
2324
CheckDestroy: testAccCheckKubernetesCronJobDestroy,
2425
Steps: []resource.TestStep{
2526
{
26-
Config: testAccKubernetesCronJobConfig_basic(name),
27+
Config: testAccKubernetesCronJobConfig_basic(name, imageName),
2728
Check: resource.ComposeAggregateTestCheckFunc(
2829
testAccCheckKubernetesCronJobExists("kubernetes_cron_job.test", &conf),
2930
resource.TestCheckResourceAttr("kubernetes_cron_job.test", "metadata.0.name", name),
@@ -42,11 +43,11 @@ func TestAccKubernetesCronJob_basic(t *testing.T) {
4243
resource.TestCheckResourceAttr("kubernetes_cron_job.test", "spec.0.job_template.0.spec.0.parallelism", "1"),
4344
resource.TestCheckResourceAttr("kubernetes_cron_job.test", "spec.0.job_template.0.spec.0.backoff_limit", "2"),
4445
resource.TestCheckResourceAttr("kubernetes_cron_job.test", "spec.0.job_template.0.spec.0.template.0.spec.0.container.0.name", "hello"),
45-
resource.TestCheckResourceAttr("kubernetes_cron_job.test", "spec.0.job_template.0.spec.0.template.0.spec.0.container.0.image", "alpine"),
46+
resource.TestCheckResourceAttr("kubernetes_cron_job.test", "spec.0.job_template.0.spec.0.template.0.spec.0.container.0.image", imageName),
4647
),
4748
},
4849
{
49-
Config: testAccKubernetesCronJobConfig_modified(name),
50+
Config: testAccKubernetesCronJobConfig_modified(name, imageName),
5051
Check: resource.ComposeAggregateTestCheckFunc(
5152
testAccCheckKubernetesCronJobExists("kubernetes_cron_job.test", &conf),
5253
resource.TestCheckResourceAttr("kubernetes_cron_job.test", "metadata.0.name", name),
@@ -75,6 +76,7 @@ func TestAccKubernetesCronJob_basic(t *testing.T) {
7576
func TestAccKubernetesCronJob_extra(t *testing.T) {
7677
var conf v1beta1.CronJob
7778
name := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
79+
imageName := alpineImageVersion
7880

7981
resource.Test(t, resource.TestCase{
8082
PreCheck: func() { testAccPreCheck(t) },
@@ -83,7 +85,7 @@ func TestAccKubernetesCronJob_extra(t *testing.T) {
8385
CheckDestroy: testAccCheckKubernetesCronJobDestroy,
8486
Steps: []resource.TestStep{
8587
{
86-
Config: testAccKubernetesCronJobConfig_extra(name),
88+
Config: testAccKubernetesCronJobConfig_extra(name, imageName),
8789
Check: resource.ComposeAggregateTestCheckFunc(
8890
testAccCheckKubernetesCronJobExists("kubernetes_cron_job.test", &conf),
8991
resource.TestCheckResourceAttr("kubernetes_cron_job.test", "metadata.0.name", name),
@@ -96,7 +98,7 @@ func TestAccKubernetesCronJob_extra(t *testing.T) {
9698
),
9799
},
98100
{
99-
Config: testAccKubernetesCronJobConfig_extraModified(name),
101+
Config: testAccKubernetesCronJobConfig_extraModified(name, imageName),
100102
Check: resource.ComposeAggregateTestCheckFunc(
101103
testAccCheckKubernetesCronJobExists("kubernetes_cron_job.test", &conf),
102104
resource.TestCheckResourceAttr("kubernetes_cron_job.test", "metadata.0.name", name),
@@ -169,7 +171,7 @@ func testAccCheckKubernetesCronJobExists(n string, obj *v1beta1.CronJob) resourc
169171
}
170172
}
171173

172-
func testAccKubernetesCronJobConfig_basic(name string) string {
174+
func testAccKubernetesCronJobConfig_basic(name, imageName string) string {
173175
return fmt.Sprintf(`resource "kubernetes_cron_job" "test" {
174176
metadata {
175177
name = "%s"
@@ -190,18 +192,18 @@ func testAccKubernetesCronJobConfig_basic(name string) string {
190192
spec {
191193
container {
192194
name = "hello"
193-
image = "alpine"
195+
image = "%s"
194196
command = ["echo", "'hello'"]
195197
}
196198
}
197199
}
198200
}
199201
}
200202
}
201-
}`, name)
203+
}`, name, imageName)
202204
}
203205

204-
func testAccKubernetesCronJobConfig_modified(name string) string {
206+
func testAccKubernetesCronJobConfig_modified(name, imageName string) string {
205207
return fmt.Sprintf(`resource "kubernetes_cron_job" "test" {
206208
metadata {
207209
name = "%s"
@@ -221,18 +223,18 @@ func testAccKubernetesCronJobConfig_modified(name string) string {
221223
spec {
222224
container {
223225
name = "hello"
224-
image = "alpine"
226+
image = "%s"
225227
command = ["echo", "'hello'"]
226228
}
227229
}
228230
}
229231
}
230232
}
231233
}
232-
}`, name)
234+
}`, name, imageName)
233235
}
234236

235-
func testAccKubernetesCronJobConfig_extra(name string) string {
237+
func testAccKubernetesCronJobConfig_extra(name, imageName string) string {
236238
return fmt.Sprintf(`resource "kubernetes_cron_job" "test" {
237239
metadata {
238240
name = "%s"
@@ -252,18 +254,18 @@ func testAccKubernetesCronJobConfig_extra(name string) string {
252254
spec {
253255
container {
254256
name = "hello"
255-
image = "alpine"
257+
image = "%s"
256258
command = ["echo", "'hello'"]
257259
}
258260
}
259261
}
260262
}
261263
}
262264
}
263-
}`, name)
265+
}`, name, imageName)
264266
}
265267

266-
func testAccKubernetesCronJobConfig_extraModified(name string) string {
268+
func testAccKubernetesCronJobConfig_extraModified(name, imageName string) string {
267269
return fmt.Sprintf(`resource "kubernetes_cron_job" "test" {
268270
metadata {
269271
name = "%s"
@@ -283,13 +285,13 @@ func testAccKubernetesCronJobConfig_extraModified(name string) string {
283285
spec {
284286
container {
285287
name = "hello"
286-
image = "alpine"
288+
image = "%s"
287289
command = ["echo", "'hello'"]
288290
}
289291
}
290292
}
291293
}
292294
}
293295
}
294-
}`, name)
296+
}`, name, imageName)
295297
}

0 commit comments

Comments
 (0)