@@ -887,6 +887,128 @@ spec:
887
887
})
888
888
}
889
889
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
+
890
1012
func assertPkgOwned (t * testing.T , kubectl e2e.Kubectl , pkgName , pkgrName , pkgrNs string ) {
891
1013
out := kubectl .Run ([]string {"get" , "package" , pkgName , "-oyaml" })
892
1014
0 commit comments