Skip to content

Commit

Permalink
Move resource version annotation to a different file (kptdev#4018)
Browse files Browse the repository at this point in the history
The newly added file can be used for storing all the metadata going
forward
It is added and removed from the client side and will not be present in
porch

Please refer this for more info: kptdev#4017
  • Loading branch information
bharat-m1 authored and johnbelamaric committed Sep 18, 2023
1 parent 0784016 commit c06b5cb
Show file tree
Hide file tree
Showing 11 changed files with 138 additions and 36 deletions.
4 changes: 2 additions & 2 deletions commands/alpha/rpkg/pull/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ func (r *runner) runE(_ *cobra.Command, args []string) error {
return errors.E(op, err)
}

if err := util.AddResourceVersionAnnotation(&resources); err != nil {
if err := util.AddRevisionMetadata(&resources); err != nil {
return errors.E(op, err)
}

Expand Down Expand Up @@ -200,7 +200,7 @@ func createScheme() (*runtime.Scheme, error) {
return scheme, nil
}

var matchResourceContents = append(kio.MatchAll, kptfilev1.KptFileName)
var matchResourceContents = append(kio.MatchAll, kptfilev1.KptFileName, kptfilev1.RevisionMetaDataFileName)

func includeFile(path string) bool {
for _, m := range matchResourceContents {
Expand Down
26 changes: 24 additions & 2 deletions commands/alpha/rpkg/pull/command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,24 @@ data:
apiVersion: config.kubernetes.io/v1
kind: ResourceList
items:
- apiVersion: porch.kpt.dev/v1alpha1
kind: KptRevisionMetadata
metadata:
name: repo-fjdos9u2nfe2f32
namespace: ns
creationTimestamp: null
resourceVersion: "999"
annotations:
config.kubernetes.io/index: '0'
internal.config.kubernetes.io/index: '0'
internal.config.kubernetes.io/path: '.KptRevisionMetadata'
config.kubernetes.io/path: '.KptRevisionMetadata'
- apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: bar
annotations:
config.kubernetes.io/local-config: "true"
internal.kpt.dev/resource-version: "999"
config.kubernetes.io/index: '0'
internal.config.kubernetes.io/index: '0'
internal.config.kubernetes.io/path: 'Kptfile'
Expand Down Expand Up @@ -121,13 +132,24 @@ data:
apiVersion: config.kubernetes.io/v1
kind: ResourceList
items:
- apiVersion: porch.kpt.dev/v1alpha1
kind: KptRevisionMetadata
metadata:
name: repo-fjdos9u2nfe2f32
namespace: ns
creationTimestamp: null
resourceVersion: "999"
annotations:
config.kubernetes.io/index: '0'
internal.config.kubernetes.io/index: '0'
internal.config.kubernetes.io/path: '.KptRevisionMetadata'
config.kubernetes.io/path: '.KptRevisionMetadata'
- apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: bar
annotations:
config.kubernetes.io/local-config: "true"
internal.kpt.dev/resource-version: "999"
config.kubernetes.io/index: '0'
internal.config.kubernetes.io/index: '0'
internal.config.kubernetes.io/path: 'Kptfile'
Expand Down
4 changes: 2 additions & 2 deletions commands/alpha/rpkg/push/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,12 +134,12 @@ func (r *runner) runE(cmd *cobra.Command, args []string) error {
},
}

rv, err := util.GetResourceVersionAnnotation(&pkgResources)
rv, err := util.GetResourceVersion(&pkgResources)
if err != nil {
return errors.E(op, err)
}
pkgResources.ResourceVersion = rv
if err = util.RemoveResourceVersionAnnotation(&pkgResources); err != nil {
if err = util.RemoveRevisionMetadata(&pkgResources); err != nil {
return errors.E(op, err)
}

Expand Down
40 changes: 13 additions & 27 deletions commands/alpha/rpkg/util/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"fmt"

fnsdk "github.com/GoogleContainerTools/kpt-functions-sdk/go/fn"
kptfilev1 "github.com/GoogleContainerTools/kpt/pkg/api/kptfile/v1"
api "github.com/GoogleContainerTools/kpt/porch/api/porch/v1alpha1"
"sigs.k8s.io/controller-runtime/pkg/client"
)
Expand Down Expand Up @@ -67,43 +68,28 @@ func GetResourceFileKubeObject(prr *api.PackageRevisionResources, file, kind, na
return ko, nil
}

func GetResourceVersionAnnotation(prr *api.PackageRevisionResources) (string, error) {
ko, err := GetResourceFileKubeObject(prr, "Kptfile", "Kptfile", "")

func GetResourceVersion(prr *api.PackageRevisionResources) (string, error) {
ko, err := GetResourceFileKubeObject(prr, kptfilev1.RevisionMetaDataFileName, kptfilev1.RevisionMetaDataKind, "")
if err != nil {
return "", err
}
annotations := ko.GetAnnotations()
rv, ok := annotations[ResourceVersionAnnotation]
if !ok {
rv = ""
}
rv, _, _ := ko.NestedString("metadata", "resourceVersion")
return rv, nil
}

func AddResourceVersionAnnotation(prr *api.PackageRevisionResources) error {
ko, err := GetResourceFileKubeObject(prr, "Kptfile", "Kptfile", "")
if err != nil {
return err
func AddRevisionMetadata(prr *api.PackageRevisionResources) error {
kptMetaDataKo := fnsdk.NewEmptyKubeObject()
kptMetaDataKo.SetAPIVersion(prr.APIVersion)
kptMetaDataKo.SetKind(kptfilev1.RevisionMetaDataKind)
if err := kptMetaDataKo.SetNestedField(prr.GetObjectMeta(), "metadata"); err != nil {
return fmt.Errorf("cannot set metadata: %v", err)
}

ko.SetAnnotation(ResourceVersionAnnotation, prr.GetResourceVersion())
prr.Spec.Resources["Kptfile"] = ko.String()
prr.Spec.Resources[kptfilev1.RevisionMetaDataFileName] = kptMetaDataKo.String()

return nil
}

func RemoveResourceVersionAnnotation(prr *api.PackageRevisionResources) error {
ko, err := GetResourceFileKubeObject(prr, "Kptfile", "Kptfile", "")
if err != nil {
return err
}

_, err = ko.RemoveNestedField("metadata", "annotations", ResourceVersionAnnotation)
if err != nil {
return err
}
prr.Spec.Resources["Kptfile"] = ko.String()

func RemoveRevisionMetadata(prr *api.PackageRevisionResources) error {
delete(prr.Spec.Resources, kptfilev1.RevisionMetaDataFileName)
return nil
}
7 changes: 4 additions & 3 deletions e2e/porch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,13 +158,14 @@ func reorderYamlStdout(t *testing.T, buf *bytes.Buffer) {
return
}

// strip out the internal.kpt.dev/resource-version
// annotation, because that will change with every run
// strip out the resourceVersion:, creationTimestamp:
// because that will change with every run
scanner := bufio.NewScanner(buf)
var newBuf bytes.Buffer
for scanner.Scan() {
line := scanner.Text()
if !strings.Contains(line, "internal.kpt.dev/resource-version:") {
if !strings.Contains(line, "resourceVersion:") &&
!strings.Contains(line, "creationTimestamp:") {
newBuf.Write([]byte(line))
newBuf.Write([]byte("\n"))
}
Expand Down
23 changes: 23 additions & 0 deletions e2e/testdata/porch/rpkg-clone/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,17 @@ commands:
stdout: |
apiVersion: config.kubernetes.io/v1
items:
- apiVersion: ""
kind: KptRevisionMetadata
metadata:
annotations:
config.kubernetes.io/index: "0"
config.kubernetes.io/path: .KptRevisionMetadata
internal.config.kubernetes.io/index: "0"
internal.config.kubernetes.io/path: .KptRevisionMetadata
name: git-3465eed5831e5c372243d048631c8ef1666b47d6
namespace: rpkg-clone
uid: uid:basens-clone:clone-2
- apiVersion: kpt.dev/v1
info:
description: sample description
Expand Down Expand Up @@ -107,13 +118,25 @@ commands:
stdout: |
apiVersion: config.kubernetes.io/v1
items:
- apiVersion: ""
kind: KptRevisionMetadata
metadata:
annotations:
config.kubernetes.io/index: "0"
config.kubernetes.io/path: .KptRevisionMetadata
internal.config.kubernetes.io/index: "0"
internal.config.kubernetes.io/path: .KptRevisionMetadata
name: git-b67f9ce14d378317ba83c9504eab9cc024932dd3
namespace: rpkg-clone
uid: uid:empty-clone:clone-1
- apiVersion: kpt.dev/v1
info:
description: Empty Blueprint
kind: Kptfile
metadata:
annotations:
config.kubernetes.io/index: "0"
config.kubernetes.io/path: Kptfile
internal.config.kubernetes.io/index: "0"
internal.config.kubernetes.io/path: Kptfile
internal.kpt.dev/upstream-identifier: kpt.dev|Kptfile|default|empty-clone
Expand Down
11 changes: 11 additions & 0 deletions e2e/testdata/porch/rpkg-copy/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,17 @@ commands:
stdout: |
apiVersion: config.kubernetes.io/v1
items:
- apiVersion: ""
kind: KptRevisionMetadata
metadata:
annotations:
config.kubernetes.io/index: "0"
config.kubernetes.io/path: .KptRevisionMetadata
internal.config.kubernetes.io/index: "0"
internal.config.kubernetes.io/path: .KptRevisionMetadata
name: git-a29df72d1135fd010ea49f4d4877001dee423be6
namespace: rpkg-copy
uid: uid:basens-edit:copy-2
- apiVersion: kpt.dev/v1
info:
description: sample description
Expand Down
11 changes: 11 additions & 0 deletions e2e/testdata/porch/rpkg-init-deploy/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,17 @@ commands:
stdout: |
apiVersion: config.kubernetes.io/v1
items:
- apiVersion: ""
kind: KptRevisionMetadata
metadata:
annotations:
config.kubernetes.io/index: "0"
config.kubernetes.io/path: .KptRevisionMetadata
internal.config.kubernetes.io/index: "0"
internal.config.kubernetes.io/path: .KptRevisionMetadata
name: git-628abd0a0903f5de6cb3604d917724f6fc1b5e08
namespace: rpkg-init-deploy
uid: uid:deploy-package:deploy
- apiVersion: kpt.dev/v1
info:
description: Test Package Description
Expand Down
11 changes: 11 additions & 0 deletions e2e/testdata/porch/rpkg-init/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,17 @@ commands:
stdout: |
apiVersion: config.kubernetes.io/v1
items:
- apiVersion: ""
kind: KptRevisionMetadata
metadata:
annotations:
config.kubernetes.io/index: "0"
config.kubernetes.io/path: .KptRevisionMetadata
internal.config.kubernetes.io/index: "0"
internal.config.kubernetes.io/path: .KptRevisionMetadata
name: git-95686470a1fd3a3ba726cce4c8f449f6bbe2b02a
namespace: rpkg-init
uid: uid:init-package:init-1
- apiVersion: kpt.dev/v1
info:
description: Test Package Description
Expand Down
33 changes: 33 additions & 0 deletions e2e/testdata/porch/rpkg-push/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@ commands:
stdout: |
apiVersion: config.kubernetes.io/v1
items:
- apiVersion: ""
kind: KptRevisionMetadata
metadata:
annotations:
config.kubernetes.io/index: "0"
config.kubernetes.io/path: .KptRevisionMetadata
internal.config.kubernetes.io/index: "0"
internal.config.kubernetes.io/path: .KptRevisionMetadata
name: git-efe3d01c68dfdcdd69114c9a7c65cce0d662a46f
namespace: rpkg-push
uid: uid:test-package:push
- apiVersion: kpt.dev/v1
info:
description: sample description
Expand Down Expand Up @@ -59,6 +70,17 @@ commands:
stdin: |
apiVersion: config.kubernetes.io/v1
items:
- apiVersion: ""
kind: KptRevisionMetadata
metadata:
annotations:
config.kubernetes.io/index: "0"
config.kubernetes.io/path: .KptRevisionMetadata
internal.config.kubernetes.io/index: "0"
internal.config.kubernetes.io/path: .KptRevisionMetadata
name: git-efe3d01c68dfdcdd69114c9a7c65cce0d662a46f
namespace: rpkg-push
uid: uid:test-package:push
- apiVersion: kpt.dev/v1
info:
description: sample description
Expand Down Expand Up @@ -122,6 +144,17 @@ commands:
stdout: |
apiVersion: config.kubernetes.io/v1
items:
- apiVersion: ""
kind: KptRevisionMetadata
metadata:
annotations:
config.kubernetes.io/index: "0"
config.kubernetes.io/path: .KptRevisionMetadata
internal.config.kubernetes.io/index: "0"
internal.config.kubernetes.io/path: .KptRevisionMetadata
name: git-efe3d01c68dfdcdd69114c9a7c65cce0d662a46f
namespace: rpkg-push
uid: uid:test-package:push
- apiVersion: kpt.dev/v1
info:
description: Updated Test Package Description
Expand Down
4 changes: 4 additions & 0 deletions pkg/api/kptfile/v1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ import (
const (
KptFileName = "Kptfile"

RevisionMetaDataFileName = ".KptRevisionMetadata"

RevisionMetaDataKind = "KptRevisionMetadata"

// Deprecated: prefer KptFileGVK
KptFileKind = "Kptfile"

Expand Down

0 comments on commit c06b5cb

Please sign in to comment.