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 }