fix(core,gen): UseStateForUnknown для Optional+Computed + live-dосылка без тихого fallback (R1+R3+A/B)

This commit is contained in:
Repinoid
2026-09-22 22:35:45 +03:00
parent 0473f80f69
commit b9fa18164c
10 changed files with 149 additions and 8 deletions
@@ -105,6 +105,24 @@ func ShouldBeOptionalComputed(p types.Param) bool {
return !p.Required && p.RefSvcId == 0 && p.Default == ""
}
// ShouldUseStateForUnknown решает, нужен ли UseStateForUnknown() plan-modifier
// для скалярного параметра.
//
// Зачем: Optional+Computed параметр БЕЗ Default при незаданном значении в плане
// = unknown. Если Update не перезаписывает его (в т.ч. ветка no-op с ранним
// return, см. instance.go), unknown протекает в state и Terraform падает с
// "Provider produced invalid result object after apply: ... unknown".
// UseStateForUnknown схлопывает unknown в предыдущее known-значение из state,
// не требуя сетевого вызова.
//
// НЕ применяем к JSON (у них свой JsonNormalize) и к полям с Default/Required.
func ShouldUseStateForUnknown(p types.Param) bool {
if p.IsJson {
return false
}
return ShouldBeOptionalComputed(p)
}
// ParamFormat возвращает вызов Format* для форматирования значения параметра.
func ParamFormat(p types.Param, varName string) string {
switch strings.ToLower(p.Type) {