github.com/crossplane/upjet@v1.3.0/pkg/migration/package_lock_steps.go (about)

     1  // SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package migration
     6  
     7  import (
     8  	"fmt"
     9  
    10  	"github.com/pkg/errors"
    11  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
    12  )
    13  
    14  func (pg *PlanGenerator) convertPackageLock(o UnstructuredWithMetadata) error {
    15  	lock, err := toPackageLock(o.Object)
    16  	if err != nil {
    17  		return err
    18  	}
    19  	isConverted := false
    20  	for _, lockConv := range pg.registry.packageLockConverters {
    21  		if lockConv.re == nil || lockConv.converter == nil || !lockConv.re.MatchString(lock.GetName()) {
    22  			continue
    23  		}
    24  		if err := lockConv.converter.PackageLockV1Beta1(lock); err != nil {
    25  			return errors.Wrapf(err, "failed to call converter on package lock: %s", lock.GetName())
    26  		}
    27  		// TODO: if a lock converter does not convert the given lock,
    28  		// we will have a false positive. Better to compute and check
    29  		// a diff here.
    30  		isConverted = true
    31  	}
    32  	if !isConverted {
    33  		return nil
    34  	}
    35  	target := &UnstructuredWithMetadata{
    36  		Object:   ToSanitizedUnstructured(lock),
    37  		Metadata: o.Metadata,
    38  	}
    39  	if err := pg.stepEditPackageLock(o, target); err != nil {
    40  		return err
    41  	}
    42  	return nil
    43  }
    44  
    45  func (pg *PlanGenerator) stepEditPackageLock(source UnstructuredWithMetadata, t *UnstructuredWithMetadata) error {
    46  	// add step for editing the package lock
    47  	s := pg.stepConfiguration(stepEditPackageLock)
    48  	t.Metadata.Path = fmt.Sprintf("%s/%s.yaml", s.Name, getVersionedName(t.Object))
    49  	s.Patch.Files = append(s.Patch.Files, t.Metadata.Path)
    50  	patchMap, err := computeJSONMergePathDoc(source.Object, t.Object)
    51  	if err != nil {
    52  		return err
    53  	}
    54  	return errors.Wrapf(pg.target.Put(UnstructuredWithMetadata{
    55  		Object: unstructured.Unstructured{
    56  			Object: addNameGVK(t.Object, patchMap),
    57  		},
    58  		Metadata: t.Metadata,
    59  	}), errEditConfigurationPackageFmt, t.Object.GetName())
    60  }