func()

in pkg/cloud/rgraph/rnode/forwardingrule/actions.go [121:173]


func (act *forwardingRuleUpdateAction) Run(ctx context.Context, cl cloud.Cloud) (exec.EventList, error) {
	// TODO: project routing.
	if act.labels != nil {
		switch act.id.Key.Type() {
		case meta.Global:
			err := cl.GlobalForwardingRules().SetLabels(ctx, act.id.Key, &compute.GlobalSetLabelsRequest{
				LabelFingerprint: act.labelFingerprint,
				Labels:           act.labels,
			})
			if err != nil {
				return nil, fmt.Errorf("forwardingRuleUpdateAction Run(%s): SetLabels: %w", act.id, err)
			}
		case meta.Regional:
			err := cl.ForwardingRules().SetLabels(ctx, act.id.Key, &compute.RegionSetLabelsRequest{
				LabelFingerprint: act.labelFingerprint,
				Labels:           act.labels,
			})
			if err != nil {
				return nil, fmt.Errorf("forwardingRuleUpdateAction Run(%s): SetLabels: %w", act.id, err)
			}
		default:
			return nil, fmt.Errorf("forwardingRuleUpdateAction Run(%s): invalid key type", act.id)
		}
	}

	if act.target != nil {
		switch act.id.Key.Type() {
		case meta.Global:
			err := cl.GlobalForwardingRules().SetTarget(ctx, act.id.Key, &compute.TargetReference{
				Target: act.target.SelfLink(meta.VersionGA),
			})
			if err != nil {
				return nil, fmt.Errorf("forwardingRuleUpdateAction Run(%s): SetTarget: %w", act.id, err)
			}
		case meta.Regional:
			err := cl.GlobalForwardingRules().SetTarget(ctx, act.id.Key, &compute.TargetReference{
				Target: act.target.SelfLink(meta.VersionGA),
			})
			if err != nil {
				return nil, fmt.Errorf("forwardingRuleUpdateAction Run(%s): SetTarget: %w", act.id, err)
			}
		default:
			return nil, fmt.Errorf("forwardingRuleUpdateAction Run(%s): invalid key type", act.id)
		}
	}

	var events exec.EventList
	if act.oldTarget != nil && !act.target.Equal(act.oldTarget) {
		events = append(events, exec.NewDropRefEvent(act.id, act.oldTarget))
	}

	return events, nil
}