in pkg/cloud/rgraph/rnode/generic_funcs.go [225:292]
func (f *UpdateFuncs[GA, Alpha, Beta]) Do(
ctx context.Context,
fingerprint string,
id *cloud.ResourceID,
desired api.Resource[GA, Alpha, Beta],
) error {
// TODO: Context logging
// TODO: span
switch desired.Version() {
case meta.VersionGA:
raw, err := desired.ToGA()
if err != nil {
return err
}
if f.Options&UpdateFuncsNoFingerprint == 0 {
// TODO: we need to make sure this is the right way to do this as it
// modifies the Resource. Patch fingerprint for the update.
if fv, err := fingerprintField(reflect.ValueOf(raw)); err != nil {
return err
} else {
fv.Set(reflect.ValueOf(fingerprint))
}
}
err = f.GA.Do(ctx, id.Key, raw, cloud.ForceProjectID(id.ProjectID))
if err != nil {
return err
}
return nil
case meta.VersionAlpha:
raw, err := desired.ToAlpha()
if err != nil {
return err
}
if f.Options&UpdateFuncsNoFingerprint == 0 {
if fv, err := fingerprintField(reflect.ValueOf(raw)); err != nil {
return err
} else {
fv.Set(reflect.ValueOf(fingerprint))
}
}
err = f.Alpha.Do(ctx, id.Key, raw, cloud.ForceProjectID(id.ProjectID))
if err != nil {
return err
}
return nil
case meta.VersionBeta:
raw, err := desired.ToBeta()
if err != nil {
return err
}
if f.Options&UpdateFuncsNoFingerprint == 0 {
if fv, err := fingerprintField(reflect.ValueOf(raw)); err != nil {
return err
} else {
fv.Set(reflect.ValueOf(fingerprint))
}
}
err = f.Beta.Do(ctx, id.Key, raw, cloud.ForceProjectID(id.ProjectID))
if err != nil {
return err
}
return nil
}
return fmt.Errorf("updateFuncs.do unsupported version %q", desired.Version())
}