in internal/services/preflight/preflight.go [134:175]
func unmarshalPreflightBody(input types.Dynamic, identityList types.List, out *map[string]interface{}) error {
if input.IsNull() || input.IsUnknown() || input.IsUnderlyingValueUnknown() {
return fmt.Errorf("input is null or unknown")
}
const unknownPlaceholder = "[length('foo')]"
data, err := dynamic.ToJSONWithUnknownValueHandler(input, func(value attr.Value) ([]byte, error) {
return json.Marshal(unknownPlaceholder)
})
if err != nil {
return fmt.Errorf("marshaling failed: %v", err)
}
if err = json.Unmarshal(data, &out); err != nil {
return fmt.Errorf(`unmarshaling failed: value: %s, err: %+v`, string(data), err)
}
if out == nil {
out = &map[string]interface{}{}
}
// make sure that there's no unknown value outside the properties bag
for k, v := range *out {
if k == "properties" {
continue
}
if searchForValue(v, unknownPlaceholder) {
return fmt.Errorf("unknown value found outside the properties bag")
}
}
if (*out)["identity"] == nil && !identityList.IsNull() && !identityList.IsUnknown() {
identityModel := identity.FromList(identityList)
expandedIdentity, err := identity.ExpandIdentity(identityModel)
if err != nil {
return err
}
(*out)["identity"] = expandedIdentity
}
return nil
}