Skip to content

Commit a22e859

Browse files
authored
Add check for annotations field while looking for pkg_repo_ann (#1127)
Signed-off-by: Praveen Rewar <[email protected]>
1 parent 7980c08 commit a22e859

File tree

2 files changed

+128
-4
lines changed

2 files changed

+128
-4
lines changed

pkg/pkgrepository/app_template.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -232,10 +232,12 @@ func (a *App) yttTemplateAddIdenticalRsRebase() kcv1alpha1.AppTemplateYtt {
232232
#@ pkg_repo_ann = "packaging.carvel.dev/package-repository-ref"
233233
#@ new_owner = data.values.new.metadata.annotations[pkg_repo_ann]
234234
#@
235-
#@ if pkg_repo_ann in data.values.existing.metadata.annotations:
236-
#@ existing_owner = data.values.existing.metadata.annotations[pkg_repo_ann]
237-
#@ else:
238-
#@ existing_owner = new_owner
235+
#@ existing_owner = new_owner
236+
#@
237+
#@ if hasattr(data.values.existing.metadata, "annotations"):
238+
#@ if pkg_repo_ann in data.values.existing.metadata.annotations:
239+
#@ existing_owner = data.values.existing.metadata.annotations[pkg_repo_ann]
240+
#@ end
239241
#@ end
240242
#@
241243
#@ if new_owner != existing_owner:

test/e2e/kappcontroller/package_repo_test.go

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,128 @@ spec:
887887
})
888888
}
889889

890+
func Test_PackageReposWithOverlappingPackages_ExistingIndependentPackage(t *testing.T) {
891+
env := e2e.BuildEnv(t)
892+
logger := e2e.Logger{}
893+
kapp := e2e.Kapp{t, env.Namespace, logger}
894+
kubectl := e2e.Kubectl{t, env.Namespace, logger}
895+
896+
refName := "shirt-mgr.co.uk"
897+
version := "5.5.5"
898+
pkgName := fmt.Sprintf("%s.%s", refName, version)
899+
pkgrName := "repo.tankyu.carvel.dev"
900+
901+
pkgrPreamble := `
902+
apiVersion: packaging.carvel.dev/v1alpha1
903+
kind: PackageRepository
904+
metadata:
905+
name: repo.tankyu.carvel.dev
906+
spec:
907+
fetch:
908+
inline:
909+
paths:
910+
`
911+
912+
pkgTemplate := fmt.Sprintf(`
913+
packages/pkg.test.carvel.dev/%[1]s.%[2]s.yml: |
914+
---
915+
apiVersion: data.packaging.carvel.dev/v1alpha1
916+
kind: Package
917+
metadata:
918+
name: %[1]s.%[2]s
919+
spec:
920+
refName: %[1]s
921+
version: %[2]s
922+
template:
923+
spec:
924+
fetch:
925+
- imgpkgBundle:
926+
image: k8slt/kctrl-example-pkg:v1.0.0
927+
template:
928+
- ytt:
929+
paths:
930+
- config/
931+
- kbld:
932+
paths:
933+
- "-"
934+
- ".imgpkg/images.yml"
935+
deploy:
936+
- kapp: {}`, refName, version)
937+
938+
pkgYAML := fmt.Sprintf(`
939+
---
940+
apiVersion: data.packaging.carvel.dev/v1alpha1
941+
kind: Package
942+
metadata:
943+
name: %[1]s.%[2]s
944+
spec:
945+
refName: %[1]s
946+
version: %[2]s
947+
template:
948+
spec:
949+
fetch:
950+
- imgpkgBundle:
951+
image: k8slt/kctrl-example-pkg:v1.0.0
952+
template:
953+
- ytt:
954+
paths:
955+
- config/
956+
- kbld:
957+
paths:
958+
- "-"
959+
- ".imgpkg/images.yml"
960+
deploy:
961+
- kapp: {}`, refName, version)
962+
963+
pkgr := fmt.Sprintf("%s%s", pkgrPreamble, pkgTemplate)
964+
965+
cleanUp := func() {
966+
kubectl.RunWithOpts([]string{"delete", "package", pkgName},
967+
e2e.RunOpts{AllowError: true})
968+
kapp.Run([]string{"delete", "-a", pkgrName})
969+
}
970+
cleanUp()
971+
defer cleanUp()
972+
973+
logger.Section("deploy package", func() {
974+
kubectl.RunWithOpts([]string{"apply", "-f", "-"}, e2e.RunOpts{
975+
StdinReader: strings.NewReader(pkgYAML)})
976+
})
977+
978+
logger.Section("pkgr will succeed and start owning the package", func() {
979+
kapp.RunWithOpts([]string{"deploy", "-f", "-", "-a", pkgrName}, e2e.RunOpts{
980+
StdinReader: strings.NewReader(pkgr),
981+
OnErrKubectl: []string{"get", "pkgr", "-A", "-oyaml"},
982+
})
983+
984+
out := kubectl.Run([]string{"get", "packages"})
985+
require.Contains(t, out, "shirt-mgr.co.uk.5.5.5")
986+
987+
assertPkgOwned(t, kubectl, "shirt-mgr.co.uk.5.5.5", pkgrName, env.Namespace)
988+
})
989+
990+
cleanUp()
991+
992+
// https://github.com/carvel-dev/kapp-controller/issues/1054
993+
logger.Section("deploy package and remove annotations", func() {
994+
kubectl.RunWithOpts([]string{"apply", "-f", "-"}, e2e.RunOpts{
995+
StdinReader: strings.NewReader(pkgYAML)})
996+
kubectl.Run([]string{"annotate", "package", pkgName, "kubectl.kubernetes.io/last-applied-configuration-"})
997+
})
998+
999+
logger.Section("pkgr will succeed and start owning the package", func() {
1000+
kapp.RunWithOpts([]string{"deploy", "-f", "-", "-a", pkgrName}, e2e.RunOpts{
1001+
StdinReader: strings.NewReader(pkgr),
1002+
OnErrKubectl: []string{"get", "pkgr", "-A", "-oyaml"},
1003+
})
1004+
1005+
out := kubectl.Run([]string{"get", "packages"})
1006+
require.Contains(t, out, "shirt-mgr.co.uk.5.5.5")
1007+
1008+
assertPkgOwned(t, kubectl, "shirt-mgr.co.uk.5.5.5", pkgrName, env.Namespace)
1009+
})
1010+
}
1011+
8901012
func assertPkgOwned(t *testing.T, kubectl e2e.Kubectl, pkgName, pkgrName, pkgrNs string) {
8911013
out := kubectl.Run([]string{"get", "package", pkgName, "-oyaml"})
8921014

0 commit comments

Comments
 (0)