Skip to content

Commit 8f6679f

Browse files
authored
Merge pull request #456 from rawmind0/tfup
Fix Error: string is required upgrading rancher2 provider from v1.10.0 or lower
2 parents c7d611d + ee21fa1 commit 8f6679f

10 files changed

Lines changed: 1506 additions & 4 deletions

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
## 1.10.3 (September 14, 2020)
2+
3+
FEATURES:
4+
5+
6+
7+
ENHANCEMENTS:
8+
9+
10+
11+
BUG FIXES:
12+
13+
* Fix `Error: string is required` upgrading rancher2 provider from v1.10.0 or lower
14+
115
## 1.10.2 (September 10, 2020)
216

317
FEATURES:

rancher2/data_source_rancher2_cluster.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func dataSourceRancher2Cluster() *schema.Resource {
2828
MaxItems: 1,
2929
Computed: true,
3030
Elem: &schema.Resource{
31-
Schema: clusterRKEConfigFields(),
31+
Schema: clusterRKEConfigFieldsData(),
3232
},
3333
},
3434
"k3s_config": {

rancher2/data_source_rancher2_cluster_template.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func dataSourceRancher2ClusterTemplate() *schema.Resource {
4040
Computed: true,
4141
Description: "Cluster template revisions",
4242
Elem: &schema.Resource{
43-
Schema: clusterTemplateRevisionFields(),
43+
Schema: clusterTemplateRevisionFieldsData(),
4444
},
4545
},
4646
"annotations": {

rancher2/resource_rancher2_cluster.go

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,15 @@ func resourceRancher2Cluster() *schema.Resource {
2020
Importer: &schema.ResourceImporter{
2121
State: resourceRancher2ClusterImport,
2222
},
23-
Schema: clusterFields(),
23+
Schema: clusterFields(),
24+
SchemaVersion: 1,
25+
StateUpgraders: []schema.StateUpgrader{
26+
{
27+
Type: resourceRancher2ClusterResourceV0().CoreConfigSchema().ImpliedType(),
28+
Upgrade: resourceRancher2ClusterStateUpgradeV0,
29+
Version: 0,
30+
},
31+
},
2432
// Setting default timeouts to be liberal in order to accommodate managed Kubernetes providers like EKS, GKE, and AKS
2533
Timeouts: &schema.ResourceTimeout{
2634
Create: schema.DefaultTimeout(30 * time.Minute),
@@ -30,6 +38,66 @@ func resourceRancher2Cluster() *schema.Resource {
3038
}
3139
}
3240

41+
func resourceRancher2ClusterResourceV0() *schema.Resource {
42+
return &schema.Resource{
43+
Schema: clusterFieldsV0(),
44+
}
45+
}
46+
47+
func resourceRancher2ClusterStateUpgradeV0(rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) {
48+
if rkeConfigs, ok := rawState["rke_config"].([]interface{}); ok && len(rkeConfigs) > 0 {
49+
for i1 := range rkeConfigs {
50+
if rkeConfig, ok := rkeConfigs[i1].(map[string]interface{}); ok && len(rkeConfig) > 0 {
51+
if services, ok := rkeConfig["services"].([]interface{}); ok && len(services) > 0 {
52+
for i2 := range services {
53+
if service, ok := services[i2].(map[string]interface{}); ok && len(service) > 0 {
54+
if kubeApis, ok := service["kube_api"].([]interface{}); ok && len(kubeApis) > 0 {
55+
for i3 := range kubeApis {
56+
if kubeAPI, ok := kubeApis[i3].(map[string]interface{}); ok && len(kubeAPI) > 0 {
57+
if eventRates, ok := kubeAPI["event_rate_limit"].([]interface{}); ok && len(eventRates) > 0 {
58+
for i4 := range eventRates {
59+
if eventRate, ok := eventRates[i4].(map[string]interface{}); ok && len(eventRate) > 0 {
60+
if config, ok := eventRate["configuration"].(map[string]interface{}); ok {
61+
newValue := ""
62+
if len(config) > 0 {
63+
conf, err := mapInterfaceToYAML(config)
64+
if err == nil {
65+
newValue = conf
66+
}
67+
}
68+
rawState["rke_config"].([]interface{})[i1].(map[string]interface{})["services"].([]interface{})[i2].(map[string]interface{})["kube_api"].([]interface{})[i3].(map[string]interface{})["event_rate_limit"].([]interface{})[i4].(map[string]interface{})["configuration"] = newValue
69+
}
70+
}
71+
}
72+
}
73+
if secretEncs, ok := kubeAPI["secrets_encryption_config"].([]interface{}); ok && len(secretEncs) > 0 {
74+
for i4 := range secretEncs {
75+
if secretEnc, ok := secretEncs[i4].(map[string]interface{}); ok && len(secretEnc) > 0 {
76+
if config, ok := secretEnc["custom_config"].(map[string]interface{}); ok {
77+
newValue := ""
78+
if len(config) > 0 {
79+
conf, err := mapInterfaceToYAML(config)
80+
if err == nil {
81+
newValue = conf
82+
}
83+
}
84+
rawState["rke_config"].([]interface{})[i1].(map[string]interface{})["services"].([]interface{})[i2].(map[string]interface{})["kube_api"].([]interface{})[i3].(map[string]interface{})["secrets_encryption_config"].([]interface{})[i4].(map[string]interface{})["custom_config"] = newValue
85+
}
86+
}
87+
}
88+
}
89+
}
90+
}
91+
}
92+
}
93+
}
94+
}
95+
}
96+
}
97+
}
98+
return rawState, nil
99+
}
100+
33101
func resourceRancher2ClusterCreate(d *schema.ResourceData, meta interface{}) error {
34102
client, err := meta.(*Config).ManagementClient()
35103
if err != nil {

rancher2/resource_rancher2_cluster_template.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@ func resourceRancher2ClusterTemplate() *schema.Resource {
1919
Importer: &schema.ResourceImporter{
2020
State: resourceRancher2ClusterTemplateImport,
2121
},
22-
Schema: clusterTemplateFields(),
22+
Schema: clusterTemplateFields(),
23+
SchemaVersion: 1,
24+
StateUpgraders: []schema.StateUpgrader{
25+
{
26+
Type: resourceRancher2ClusterTemplateResourceV0().CoreConfigSchema().ImpliedType(),
27+
Upgrade: resourceRancher2ClusterTemplateStateUpgradeV0,
28+
Version: 0,
29+
},
30+
},
2331
Timeouts: &schema.ResourceTimeout{
2432
Create: schema.DefaultTimeout(10 * time.Minute),
2533
Update: schema.DefaultTimeout(10 * time.Minute),
@@ -106,6 +114,33 @@ func resourceRancher2ClusterTemplate() *schema.Resource {
106114
}
107115
}
108116

117+
func resourceRancher2ClusterTemplateResourceV0() *schema.Resource {
118+
return &schema.Resource{
119+
Schema: clusterTemplateFieldsV0(),
120+
}
121+
}
122+
123+
func resourceRancher2ClusterTemplateStateUpgradeV0(rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) {
124+
if tmplRevisions, ok := rawState["template_revisions"].([]interface{}); ok && len(tmplRevisions) > 0 {
125+
for i1 := range tmplRevisions {
126+
if tmplRevision, ok := tmplRevisions[i1].(map[string]interface{}); ok && len(tmplRevision) > 0 {
127+
if clusterConfigs, ok := tmplRevision["cluster_config"].([]interface{}); ok && len(clusterConfigs) > 0 {
128+
for i2 := range clusterConfigs {
129+
if clusterConfig, ok := clusterConfigs[i2].(map[string]interface{}); ok && len(clusterConfig) > 0 {
130+
newValue, err := resourceRancher2ClusterStateUpgradeV0(clusterConfig, meta)
131+
if err != nil {
132+
return nil, fmt.Errorf("Upgrading Cluster Template schema V0: %v", err)
133+
}
134+
rawState["template_revisions"].([]interface{})[i1].(map[string]interface{})["cluster_config"].([]interface{})[i2] = newValue
135+
}
136+
}
137+
}
138+
}
139+
}
140+
}
141+
return rawState, nil
142+
}
143+
109144
func resourceRancher2ClusterTemplateCreate(d *schema.ResourceData, meta interface{}) error {
110145
ctrIndex, clusterTemplate, clusterTemplateRevisions, err := expandClusterTemplate(d)
111146
if err != nil {

0 commit comments

Comments
 (0)