Skip to content

Commit 53f910a

Browse files
committed
Revert "Allow opting into using json.Number in state."
This reverts commit 272df8b. This commit causes compatibility issues when decoding timeouts.
1 parent 9cca986 commit 53f910a

File tree

12 files changed

+29
-290
lines changed

12 files changed

+29
-290
lines changed

helper/resource/json.go

Lines changed: 0 additions & 12 deletions
This file was deleted.

helper/resource/state_shim.go

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package resource
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"strconv"
76

@@ -71,11 +70,11 @@ func shimOutputState(so *tfjson.StateOutput) (*terraform.OutputState, error) {
7170
elements[i] = el.(bool)
7271
}
7372
os.Value = elements
74-
// unmarshalled number from JSON will always be json.Number
75-
case json.Number:
73+
// unmarshalled number from JSON will always be float64
74+
case float64:
7675
elements := make([]interface{}, len(v))
7776
for i, el := range v {
78-
elements[i] = el.(json.Number)
77+
elements[i] = el.(float64)
7978
}
8079
os.Value = elements
8180
case []interface{}:
@@ -94,10 +93,10 @@ func shimOutputState(so *tfjson.StateOutput) (*terraform.OutputState, error) {
9493
os.Type = "string"
9594
os.Value = strconv.FormatBool(v)
9695
return os, nil
97-
// unmarshalled number from JSON will always be json.Number
98-
case json.Number:
96+
// unmarshalled number from JSON will always be float64
97+
case float64:
9998
os.Type = "string"
100-
os.Value = v.String()
99+
os.Value = strconv.FormatFloat(v, 'f', -1, 64)
101100
return os, nil
102101
}
103102

@@ -156,13 +155,8 @@ func shimResourceStateKey(res *tfjson.StateResource) (string, error) {
156155

157156
var index int
158157
switch idx := res.Index.(type) {
159-
case json.Number:
160-
i, err := idx.Int64()
161-
if err != nil {
162-
return "", fmt.Errorf("unexpected index value (%q) for %q, ",
163-
idx, res.Address)
164-
}
165-
index = int(i)
158+
case float64:
159+
index = int(idx)
166160
default:
167161
return "", fmt.Errorf("unexpected index type (%T) for %q, "+
168162
"for_each is not supported", res.Index, res.Address)
@@ -262,8 +256,8 @@ func (sf *shimmedFlatmap) AddEntry(key string, value interface{}) error {
262256
return nil
263257
case bool:
264258
sf.m[key] = strconv.FormatBool(el)
265-
case json.Number:
266-
sf.m[key] = el.String()
259+
case float64:
260+
sf.m[key] = strconv.FormatFloat(el, 'f', -1, 64)
267261
case string:
268262
sf.m[key] = el
269263
case map[string]interface{}:

helper/resource/testing_new_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -171,18 +171,18 @@ func TestShimState(t *testing.T) {
171171
"list_of_int": {
172172
Type: "list",
173173
Value: []interface{}{
174-
json.Number("1"),
175-
json.Number("4"),
176-
json.Number("9"),
174+
// TODO: Not sure if this is expectable
175+
// but we have no way of distinguishing between int and float
176+
// due outputs being schema-less and numbers
177+
// always being unmarshaled into float64
178+
1.0, 4.0, 9.0,
177179
},
178180
Sensitive: false,
179181
},
180182
"list_of_float": {
181183
Type: "list",
182184
Value: []interface{}{
183-
json.Number("1.2"),
184-
json.Number("4.2"),
185-
json.Number("9.8"),
185+
1.2, 4.2, 9.8,
186186
},
187187
Sensitive: false,
188188
},
@@ -280,12 +280,12 @@ func TestShimState(t *testing.T) {
280280
Value: []interface{}{
281281
map[string]interface{}{
282282
"allow_bool": true,
283-
"port": json.Number("443"),
283+
"port": float64(443),
284284
"rule": "allow",
285285
},
286286
map[string]interface{}{
287287
"allow_bool": false,
288-
"port": json.Number("80"),
288+
"port": float64(80),
289289
"rule": "deny",
290290
},
291291
},
@@ -1088,7 +1088,7 @@ func TestShimState(t *testing.T) {
10881088
var rawState tfjson.State
10891089
rawState.UseJSONNumber(true)
10901090

1091-
err := unmarshalJSON([]byte(tc.RawState), &rawState)
1091+
err := json.Unmarshal([]byte(tc.RawState), &rawState)
10921092
if err != nil {
10931093
t.Fatal(err)
10941094
}

helper/schema/field_writer_map_test.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,15 +88,6 @@ func TestMapFieldWriter(t *testing.T) {
8888
},
8989
},
9090

91-
"bigint": {
92-
[]string{"int"},
93-
7227701560655103598,
94-
false,
95-
map[string]string{
96-
"int": "7227701560655103598",
97-
},
98-
},
99-
10091
"string": {
10192
[]string{"string"},
10293
"42",

helper/schema/grpc_provider.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -282,11 +282,7 @@ func (s *GRPCProviderServer) UpgradeResourceState(ctx context.Context, req *tfpr
282282
}
283283
// if there's a JSON state, we need to decode it.
284284
case len(req.RawState.JSON) > 0:
285-
if res.UseJSONNumber {
286-
err = unmarshalJSON(req.RawState.JSON, &jsonMap)
287-
} else {
288-
err = json.Unmarshal(req.RawState.JSON, &jsonMap)
289-
}
285+
err = json.Unmarshal(req.RawState.JSON, &jsonMap)
290286
if err != nil {
291287
resp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)
292288
return resp, nil
@@ -413,7 +409,7 @@ func UpgradeFlatmapState(ctx context.Context, version int, m map[string]string,
413409
return nil, 0, err
414410
}
415411

416-
jsonMap, err := stateValueToJSONMap(newConfigVal, schemaType, res.UseJSONNumber)
412+
jsonMap, err := StateValueToJSONMap(newConfigVal, schemaType)
417413
return jsonMap, upgradedVersion, err
418414
}
419415

@@ -563,7 +559,7 @@ func (s *GRPCProviderServer) ReadResource(ctx context.Context, req *tfprotov5.Re
563559

564560
private := make(map[string]interface{})
565561
if len(req.Private) > 0 {
566-
if err := unmarshalJSON(req.Private, &private); err != nil {
562+
if err := json.Unmarshal(req.Private, &private); err != nil {
567563
resp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)
568564
return resp, nil
569565
}
@@ -671,7 +667,7 @@ func (s *GRPCProviderServer) PlanResourceChange(ctx context.Context, req *tfprot
671667
}
672668
priorPrivate := make(map[string]interface{})
673669
if len(req.PriorPrivate) > 0 {
674-
if err := unmarshalJSON(req.PriorPrivate, &priorPrivate); err != nil {
670+
if err := json.Unmarshal(req.PriorPrivate, &priorPrivate); err != nil {
675671
resp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)
676672
return resp, nil
677673
}
@@ -885,7 +881,7 @@ func (s *GRPCProviderServer) ApplyResourceChange(ctx context.Context, req *tfpro
885881

886882
private := make(map[string]interface{})
887883
if len(req.PlannedPrivate) > 0 {
888-
if err := unmarshalJSON(req.PlannedPrivate, &private); err != nil {
884+
if err := json.Unmarshal(req.PlannedPrivate, &private); err != nil {
889885
resp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)
890886
return resp, nil
891887
}

0 commit comments

Comments
 (0)