From 730ce380e21a49fa267c24173f316b98c0824967 Mon Sep 17 00:00:00 2001 From: lgtm <1gtm@users.noreply.github.com> Date: Thu, 28 Apr 2022 03:17:36 -0700 Subject: [PATCH] Add support for cross-namespace target (#1032) (#1033) /cherry-pick Signed-off-by: hmsayem Co-authored-by: Hossain Mahmud --- go.mod | 5 +- go.sum | 10 +- pkg/backup.go | 4 +- pkg/restore.go | 4 +- pkg/util.go | 19 +- .../offshoot-api/api/v1/generated.pb.go | 1163 +++++++++-------- .../offshoot-api/api/v1/generated.proto | 54 +- .../offshoot-api/api/v1/openapi_generated.go | 54 +- .../api/v1/runtime_settings_types.go | 42 +- .../kmodules.xyz/offshoot-api/api/v1/types.go | 11 + .../api/v1/zz_generated.deepcopy.go | 14 + vendor/modules.txt | 5 +- .../v1alpha1/openapi_generated.go | 54 +- .../apis/stash/v1alpha1/openapi_generated.go | 54 +- .../stash/v1beta1/backup_blueprint_types.go | 8 +- .../apis/stash/v1beta1/openapi_generated.go | 69 +- .../apimachinery/apis/stash/v1beta1/types.go | 2 + .../apis/stash/v1beta1/types_helpers.go | 9 + .../apis/ui/v1alpha1/openapi_generated.go | 54 +- .../stash.appscode.com_backupbatches.yaml | 242 ++++ .../stash.appscode.com_backupblueprints.yaml | 127 +- ...ash.appscode.com_backupconfigurations.yaml | 116 ++ .../stash.appscode.com_backupsessions.yaml | 2 + .../stash.appscode.com_restorebatches.yaml | 128 ++ .../stash.appscode.com_restoresessions.yaml | 116 ++ .../pkg/conditions/backup_invoker.go | 21 +- .../pkg/conditions/restore_invoker.go | 13 +- .../pkg/invoker/backup_invoker.go | 5 +- .../apimachinery/pkg/invoker/backupbatch.go | 14 +- .../pkg/invoker/backupconfiguration.go | 2 +- .../apimachinery/pkg/invoker/backupsession.go | 4 +- .../apimachinery/pkg/invoker/restorebatch.go | 9 +- .../pkg/invoker/restoresession.go | 8 +- .../apimachinery/pkg/util/addon.go | 4 +- 34 files changed, 1830 insertions(+), 616 deletions(-) diff --git a/go.mod b/go.mod index 7c7a56a33..023a3779c 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,6 @@ require ( gomodules.xyz/flags v0.1.3 gomodules.xyz/go-sh v0.1.0 gomodules.xyz/logs v0.0.6 - gomodules.xyz/mergo v0.3.13-0.20220214162359-48efe39fd402 // indirect gomodules.xyz/x v0.0.13 k8s.io/api v0.21.1 k8s.io/apimachinery v0.21.1 @@ -16,8 +15,8 @@ require ( k8s.io/klog/v2 v2.9.0 kmodules.xyz/client-go v0.0.0-20220404224906-af7b092cfac5 kmodules.xyz/custom-resources v0.0.0-20220317220154-7beb809b1f5e - kmodules.xyz/offshoot-api v0.0.0-20220329041708-c076b2bcb0f8 - stash.appscode.dev/apimachinery v0.19.0 + kmodules.xyz/offshoot-api v0.0.0-20220419215722-c7fc995091d3 + stash.appscode.dev/apimachinery v0.19.1-0.20220425033401-c840c081133c ) replace bitbucket.org/ww/goautoneg => gomodules.xyz/goautoneg v0.0.0-20120707110453-a547fc61f48d diff --git a/go.sum b/go.sum index a2fe79a49..a3b5da121 100644 --- a/go.sum +++ b/go.sum @@ -165,6 +165,7 @@ github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNE github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1-0.20220316001817-d5090ed65664/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= @@ -1097,7 +1098,6 @@ k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ kmodules.xyz/client-go v0.0.0-20210617233340-13d22e91512b/go.mod h1:A6GAK6xP5zBuWK6A/vUkkjKzcuywkms7fIxRf5wblO4= kmodules.xyz/client-go v0.0.0-20211107190155-5bb4090d2728/go.mod h1:ENUu8pPK19xzBkVpAJHoGCI2QRvb1SqffWRt0K2sV5I= kmodules.xyz/client-go v0.0.0-20220215012708-9963581d69a7/go.mod h1:sOq5P3AkZdv6D/skvUPwEG15NDYy5olwBllH/JXfhGI= -kmodules.xyz/client-go v0.0.0-20220317213815-2a6d5a5784f2/go.mod h1:7pExIHGzUdu8ZGveYvAaXEhS4GdczoOy8z+hq6x6K9A= kmodules.xyz/client-go v0.0.0-20220404224906-af7b092cfac5 h1:UkXLQ5SMS98RwnJffKAU0ANXVq9AHSLabQ9NKUhkCgA= kmodules.xyz/client-go v0.0.0-20220404224906-af7b092cfac5/go.mod h1:7pExIHGzUdu8ZGveYvAaXEhS4GdczoOy8z+hq6x6K9A= kmodules.xyz/constants v0.0.0-20210218100002-2c304bfda278/go.mod h1:DbiFk1bJ1KEO94t1SlAn7tzc+Zz95rSXgyUKa2nzPmY= @@ -1108,8 +1108,8 @@ kmodules.xyz/custom-resources v0.0.0-20220317220154-7beb809b1f5e/go.mod h1:OCLml kmodules.xyz/objectstore-api v0.0.0-20220317220441-f1d593d0a778 h1:1biCLf6zjBzg9YI9xDjrH6RrKtizpKVB7iuo/5NWOo0= kmodules.xyz/objectstore-api v0.0.0-20220317220441-f1d593d0a778/go.mod h1:rJ3QmHvS0CCJAhhdbXh+O2nlEY5gEmgYdpo3vA4nAm4= kmodules.xyz/offshoot-api v0.0.0-20210829122105-6f4d481b0c61/go.mod h1:3LECbAL3FgbyK80NP3V3Pmiuo/a3hFWg/PR6SPFhTns= -kmodules.xyz/offshoot-api v0.0.0-20220329041708-c076b2bcb0f8 h1:epLCcaqw60QQ+VbNawJrhM9Y4DpumaLSGzRebsfBCkE= -kmodules.xyz/offshoot-api v0.0.0-20220329041708-c076b2bcb0f8/go.mod h1:9i9RrFY0BtU9jSm70nxhWlLdl9TSZ8pxTnfyPUicq90= +kmodules.xyz/offshoot-api v0.0.0-20220419215722-c7fc995091d3 h1:jgOE/YqNIIMzh+4hXGgqvnx5JQKI4+WyfK2AAPL+1S4= +kmodules.xyz/offshoot-api v0.0.0-20220419215722-c7fc995091d3/go.mod h1:9i9RrFY0BtU9jSm70nxhWlLdl9TSZ8pxTnfyPUicq90= kmodules.xyz/prober v0.0.0-20220317043828-5ae0114adcad h1:bMfimFOEgmaKCN/gnSxLIRvQbWg4dqBgcWrMnHWQgyc= kmodules.xyz/prober v0.0.0-20220317043828-5ae0114adcad/go.mod h1:QC3O1p+sU/8NnpLKI0VCAO3IQwPlwuimf9l6+Qp3Vt8= kmodules.xyz/resource-metrics v0.0.8/go.mod h1:M7rWuo2qh3BpHhogiEVPnvGY9Xx4Pfygqn1Rex8YbgM= @@ -1139,5 +1139,5 @@ sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -stash.appscode.dev/apimachinery v0.19.0 h1:G4oBu55042Ewigtwz/7iICWSiamvomJD8SuFlrEm7x8= -stash.appscode.dev/apimachinery v0.19.0/go.mod h1:vgzwLa2KFxfbcrTS3gzhJLYmx4WdZpHfW9n8a7Hzhzc= +stash.appscode.dev/apimachinery v0.19.1-0.20220425033401-c840c081133c h1:lF8fUoGuSGoZfA2L/dSMVD3uWBiSgkD3r0WKAlMfRvQ= +stash.appscode.dev/apimachinery v0.19.1-0.20220425033401-c840c081133c/go.mod h1:LYvEexF9dSGr9+NmeED+LOo6+6xb+6lMfgyLoEKrPbs= diff --git a/pkg/backup.go b/pkg/backup.go index 63e95e069..2ade3ac3c 100644 --- a/pkg/backup.go +++ b/pkg/backup.go @@ -86,6 +86,7 @@ func NewCmdBackup() *cobra.Command { APIVersion: appcatalog.SchemeGroupVersion.String(), Kind: appcatalog.ResourceKindApp, Name: opt.appBindingName, + Namespace: opt.appBindingNamespace, } var backupOutput *restic.BackupOutput @@ -123,6 +124,7 @@ func NewCmdBackup() *cobra.Command { cmd.Flags().StringVar(&opt.namespace, "namespace", "default", "Namespace of Backup/Restore Session") cmd.Flags().StringVar(&opt.backupSessionName, "backupsession", opt.backupSessionName, "Name of the Backup Session") cmd.Flags().StringVar(&opt.appBindingName, "appbinding", opt.appBindingName, "Name of the app binding") + cmd.Flags().StringVar(&opt.appBindingNamespace, "appbinding-namespace", opt.appBindingNamespace, "Namespace of the app binding") cmd.Flags().StringVar(&opt.storageSecret.Name, "storage-secret-name", opt.storageSecret.Name, "Name of the storage secret") cmd.Flags().StringVar(&opt.storageSecret.Namespace, "storage-secret-namespace", opt.storageSecret.Namespace, "Namespace of the storage secret") @@ -185,7 +187,7 @@ func (opt *postgresOptions) backupPostgreSQL(targetRef api_v1beta1.TargetRef) (* return nil, err } - appBinding, err := opt.catalogClient.AppcatalogV1alpha1().AppBindings(opt.namespace).Get(context.TODO(), opt.appBindingName, metav1.GetOptions{}) + appBinding, err := opt.catalogClient.AppcatalogV1alpha1().AppBindings(opt.appBindingNamespace).Get(context.TODO(), opt.appBindingName, metav1.GetOptions{}) if err != nil { return nil, err } diff --git a/pkg/restore.go b/pkg/restore.go index f7af60455..097668664 100644 --- a/pkg/restore.go +++ b/pkg/restore.go @@ -80,6 +80,7 @@ func NewCmdRestore() *cobra.Command { APIVersion: appcatalog.SchemeGroupVersion.String(), Kind: appcatalog.ResourceKindApp, Name: opt.appBindingName, + Namespace: opt.appBindingNamespace, } var restoreOutput *restic.RestoreOutput restoreOutput, err = opt.restorePostgreSQL(targetRef) @@ -114,6 +115,7 @@ func NewCmdRestore() *cobra.Command { cmd.Flags().StringVar(&kubeconfigPath, "kubeconfig", kubeconfigPath, "Path to kubeconfig file with authorization information (the master location is set by the master flag).") cmd.Flags().StringVar(&opt.namespace, "namespace", "default", "Namespace of Backup/Restore Session") cmd.Flags().StringVar(&opt.appBindingName, "appbinding", opt.appBindingName, "Name of the app binding") + cmd.Flags().StringVar(&opt.appBindingNamespace, "appbinding-namespace", opt.appBindingNamespace, "Namespace of the app binding") cmd.Flags().StringVar(&opt.storageSecret.Name, "storage-secret-name", opt.storageSecret.Name, "Name of the storage secret") cmd.Flags().StringVar(&opt.storageSecret.Namespace, "storage-secret-namespace", opt.storageSecret.Namespace, "Namespace of the storage secret") @@ -152,7 +154,7 @@ func (opt *postgresOptions) restorePostgreSQL(targetRef api_v1beta1.TargetRef) ( return nil, err } - appBinding, err := opt.catalogClient.AppcatalogV1alpha1().AppBindings(opt.namespace).Get(context.TODO(), opt.appBindingName, metav1.GetOptions{}) + appBinding, err := opt.catalogClient.AppcatalogV1alpha1().AppBindings(opt.appBindingNamespace).Get(context.TODO(), opt.appBindingName, metav1.GetOptions{}) if err != nil { return nil, err } diff --git a/pkg/util.go b/pkg/util.go index 999bd0eae..2e35f3a6d 100644 --- a/pkg/util.go +++ b/pkg/util.go @@ -63,15 +63,16 @@ type postgresOptions struct { stashClient stash.Interface catalogClient appcatalog_cs.Interface - namespace string - backupSessionName string - appBindingName string - backupCMD string - pgArgs string - user string - outputDir string - storageSecret kmapi.ObjectReference - waitTimeout int32 + namespace string + backupSessionName string + appBindingName string + appBindingNamespace string + backupCMD string + pgArgs string + user string + outputDir string + storageSecret kmapi.ObjectReference + waitTimeout int32 setupOptions restic.SetupOptions backupOptions restic.BackupOptions diff --git a/vendor/kmodules.xyz/offshoot-api/api/v1/generated.pb.go b/vendor/kmodules.xyz/offshoot-api/api/v1/generated.pb.go index bbdae94ed..cddb6dc29 100644 --- a/vendor/kmodules.xyz/offshoot-api/api/v1/generated.pb.go +++ b/vendor/kmodules.xyz/offshoot-api/api/v1/generated.pb.go @@ -438,141 +438,144 @@ func init() { } var fileDescriptor_3a450b99b211cb39 = []byte{ - // 2134 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0x37, 0x25, 0x52, 0x22, 0x1f, 0x25, 0x4a, 0x1a, 0x59, 0xce, 0x5a, 0x55, 0x49, 0x85, 0x2d, - 0x0a, 0x05, 0x8d, 0xa9, 0x28, 0x71, 0x01, 0x27, 0x41, 0x9d, 0x6a, 0x29, 0xd9, 0x56, 0x4a, 0x4b, - 0xc4, 0x50, 0x49, 0x3f, 0xd0, 0x8f, 0xac, 0x96, 0x23, 0x6a, 0xad, 0xe5, 0x0e, 0xbb, 0x33, 0xa4, - 0xcd, 0x14, 0x45, 0x73, 0x2c, 0x7a, 0xea, 0x5f, 0x50, 0xa0, 0x7f, 0x40, 0x6f, 0x3d, 0xf5, 0xdc, - 0x83, 0x81, 0x5e, 0x72, 0xcc, 0x89, 0xad, 0xd9, 0xff, 0xc2, 0x45, 0x81, 0x62, 0x66, 0x67, 0xbf, - 0xc8, 0xa5, 0x25, 0xd1, 0x76, 0x72, 0x10, 0xc0, 0x7d, 0x1f, 0xbf, 0xf7, 0xe6, 0xcd, 0x9b, 0xf7, - 0x66, 0x9e, 0xe0, 0x9d, 0xf3, 0x36, 0x6d, 0x76, 0x6d, 0xc2, 0x2a, 0x4f, 0xfa, 0x9f, 0x6f, 0xd3, - 0xd3, 0x53, 0x76, 0x46, 0x29, 0xbf, 0x65, 0x74, 0xac, 0x6d, 0xf1, 0xd7, 0xdb, 0xd9, 0x6e, 0x11, - 0x87, 0xb8, 0x06, 0x27, 0xcd, 0x4a, 0xc7, 0xa5, 0x9c, 0xa2, 0xcd, 0xa8, 0x46, 0xc5, 0xd7, 0xf8, - 0xb5, 0xd1, 0xb1, 0x2a, 0xe2, 0xaf, 0xb7, 0xb3, 0x7e, 0xab, 0x65, 0xf1, 0xb3, 0xee, 0x49, 0xc5, - 0xa4, 0xed, 0xed, 0x16, 0x6d, 0xd1, 0x6d, 0xa9, 0x78, 0xd2, 0x3d, 0x95, 0x5f, 0xf2, 0x43, 0xfe, - 0xf2, 0x00, 0xd7, 0xcb, 0xe7, 0x77, 0x58, 0xc5, 0xa2, 0xd2, 0x9e, 0x49, 0x5d, 0x92, 0x60, 0x74, - 0xfd, 0x76, 0x28, 0xd3, 0x36, 0xcc, 0x33, 0xcb, 0x21, 0x6e, 0x7f, 0xbb, 0x73, 0xde, 0x12, 0x04, - 0xb6, 0xdd, 0x26, 0xdc, 0x48, 0xd0, 0x2a, 0xff, 0x2f, 0x03, 0x5a, 0x95, 0x3a, 0xdc, 0x10, 0xf2, - 0xb8, 0xeb, 0x70, 0xab, 0x4d, 0x1a, 0x84, 0x73, 0xcb, 0x69, 0x31, 0xf4, 0x33, 0xc8, 0xb9, 0x84, - 0xd1, 0xae, 0x6b, 0x12, 0xa6, 0xa5, 0x36, 0x53, 0x5b, 0xf9, 0x77, 0xb7, 0x2a, 0x9e, 0x19, 0xb9, - 0x10, 0xe1, 0x4a, 0xa5, 0xb7, 0x53, 0xc1, 0x4a, 0x08, 0x93, 0xdf, 0x74, 0x2d, 0x97, 0xb4, 0x89, - 0xc3, 0x99, 0xbe, 0xf2, 0x74, 0x50, 0xba, 0x36, 0x1c, 0x94, 0x72, 0x3e, 0x97, 0xe1, 0x10, 0x0d, - 0x61, 0x58, 0xb4, 0xad, 0x1e, 0x71, 0x08, 0x63, 0x75, 0x97, 0x9e, 0x10, 0x6d, 0x46, 0xc2, 0xdf, - 0x4c, 0x82, 0x97, 0x02, 0xfa, 0xca, 0x70, 0x50, 0x5a, 0xac, 0x45, 0x75, 0x70, 0x1c, 0x02, 0x7d, - 0x02, 0x05, 0x97, 0x18, 0x4d, 0x2b, 0x04, 0x9d, 0xbd, 0x08, 0x14, 0x0d, 0x07, 0xa5, 0x02, 0x8e, - 0x29, 0xe1, 0x11, 0x10, 0xf4, 0x31, 0xe4, 0x6c, 0xeb, 0x94, 0x98, 0x7d, 0xd3, 0x26, 0x5a, 0x5a, - 0x22, 0x7e, 0x3b, 0x09, 0xb1, 0xe6, 0x0b, 0xe9, 0x8b, 0x62, 0xd9, 0xc1, 0x27, 0x0e, 0xd5, 0xd1, - 0x09, 0x2c, 0x31, 0x62, 0x76, 0x5d, 0x8b, 0xf7, 0x45, 0xd4, 0xc9, 0x13, 0xae, 0x65, 0x24, 0xe2, - 0x77, 0x92, 0x10, 0x1b, 0x71, 0x51, 0x7d, 0x75, 0x38, 0x28, 0x2d, 0x8d, 0x10, 0xf1, 0x28, 0x20, - 0xaa, 0x41, 0xda, 0xb1, 0x4c, 0xa2, 0xcd, 0x49, 0xe0, 0x4a, 0xe5, 0xa2, 0x64, 0xac, 0x1c, 0x5a, - 0x66, 0xb0, 0xe7, 0x7a, 0x76, 0x38, 0x28, 0xa5, 0x05, 0x05, 0x4b, 0x14, 0x74, 0x0c, 0x73, 0x16, - 0x95, 0x78, 0xf3, 0x12, 0xef, 0x9d, 0x8b, 0xf1, 0x0e, 0x8e, 0x62, 0x88, 0x30, 0x1c, 0x94, 0xe6, - 0x3c, 0x1a, 0x56, 0x58, 0xa8, 0x06, 0xf3, 0xc4, 0xe9, 0xdd, 0x73, 0x69, 0x5b, 0xcb, 0x6e, 0xce, - 0x6e, 0xe5, 0xdf, 0x7d, 0x33, 0x69, 0xfd, 0xfb, 0x9e, 0x48, 0x43, 0xe6, 0x8c, 0xbe, 0xa4, 0x12, - 0x6a, 0x5e, 0x91, 0xb1, 0x0f, 0x81, 0xde, 0x87, 0x59, 0xe2, 0xf4, 0xb4, 0x9c, 0x44, 0x5a, 0x9f, - 0x80, 0xf4, 0xa9, 0xe1, 0xea, 0x79, 0x05, 0x31, 0xbb, 0xef, 0xf4, 0xb0, 0xd0, 0x29, 0xff, 0x0a, - 0x0a, 0x71, 0x77, 0x51, 0x09, 0x32, 0xa6, 0x6d, 0x30, 0x2f, 0xe1, 0x33, 0x7a, 0x6e, 0x38, 0x28, - 0x65, 0xaa, 0x82, 0x80, 0x3d, 0x3a, 0xfa, 0x3e, 0xe4, 0xe4, 0x8f, 0x3d, 0x83, 0x1b, 0x32, 0x6d, - 0x33, 0xde, 0x86, 0x57, 0x7d, 0x22, 0x0e, 0xf9, 0xe5, 0xbb, 0xb0, 0x10, 0x43, 0xaf, 0x00, 0x18, - 0xcd, 0x47, 0x5d, 0xc6, 0xc5, 0x21, 0x51, 0x26, 0x0a, 0xc3, 0x41, 0x09, 0x76, 0x03, 0x2a, 0x8e, - 0x48, 0x94, 0xff, 0x35, 0x03, 0x70, 0x74, 0xf2, 0x88, 0x98, 0xfc, 0x21, 0xe1, 0x06, 0xfa, 0x0c, - 0xe6, 0x6c, 0xe3, 0x84, 0xd8, 0xc2, 0x3b, 0xb1, 0xd8, 0x3b, 0x17, 0xef, 0x46, 0xa8, 0x5d, 0xa9, - 0x49, 0xd5, 0x7d, 0x87, 0xbb, 0x7d, 0xbd, 0xa0, 0x42, 0x31, 0xe7, 0x11, 0xb1, 0xc2, 0x45, 0x1c, - 0xf2, 0x86, 0xe3, 0x50, 0x6e, 0x70, 0x8b, 0x3a, 0x4c, 0x9b, 0x91, 0x66, 0x7e, 0x78, 0x25, 0x33, - 0xbb, 0xa1, 0xbe, 0x67, 0x6b, 0x55, 0xd9, 0xca, 0x47, 0x38, 0x38, 0x6a, 0x66, 0xfd, 0x7d, 0xc8, - 0x47, 0x9c, 0x43, 0xcb, 0x30, 0x7b, 0x4e, 0xfa, 0x32, 0x3c, 0x39, 0x2c, 0x7e, 0xa2, 0xeb, 0x90, - 0xe9, 0x19, 0x76, 0xd7, 0xab, 0x13, 0x39, 0xec, 0x7d, 0x7c, 0x30, 0x73, 0x27, 0xb5, 0x7e, 0x17, - 0x96, 0x47, 0x0d, 0x5e, 0x45, 0xbf, 0xfc, 0x3c, 0x0d, 0x2b, 0x75, 0xc3, 0xe5, 0x96, 0x61, 0x47, - 0x02, 0xbd, 0x09, 0x69, 0xc7, 0x68, 0x13, 0x0f, 0x42, 0x5f, 0x50, 0x0b, 0x48, 0x1f, 0x1a, 0x6d, - 0x71, 0x30, 0x8c, 0x36, 0x41, 0x77, 0x60, 0xc1, 0x2f, 0xa6, 0x82, 0xea, 0x01, 0xeb, 0xd7, 0x95, - 0xe4, 0xc2, 0xfd, 0x08, 0x0f, 0xc7, 0x24, 0xd1, 0x36, 0xe4, 0x04, 0x02, 0xeb, 0x18, 0xa6, 0x57, - 0xa2, 0x72, 0x61, 0xb1, 0x3c, 0xf4, 0x19, 0x38, 0x94, 0x41, 0xad, 0x60, 0xd7, 0xd3, 0x72, 0x3b, - 0x3e, 0xba, 0x78, 0x3b, 0xc6, 0x56, 0x74, 0xa9, 0xcd, 0xff, 0x6d, 0x7c, 0xf3, 0x33, 0xd2, 0xda, - 0xde, 0x34, 0xd6, 0xae, 0x9e, 0x03, 0xe8, 0x31, 0x2c, 0xd1, 0xc7, 0xa2, 0x0b, 0x91, 0x53, 0xe2, - 0x12, 0x47, 0xf4, 0x9c, 0x39, 0xe9, 0xc0, 0xed, 0xc8, 0x89, 0x0e, 0x5a, 0x5b, 0xa5, 0x73, 0xde, - 0x12, 0x04, 0x56, 0x11, 0xad, 0x4d, 0x66, 0x60, 0x4c, 0x59, 0x7f, 0x43, 0x19, 0x5c, 0x8a, 0xd3, - 0x19, 0x1e, 0xb5, 0xf2, 0x4d, 0x26, 0xdf, 0x5f, 0x67, 0x60, 0xad, 0x4e, 0x5c, 0x66, 0x31, 0x4e, - 0x1c, 0xfe, 0x29, 0xb5, 0xbb, 0x6d, 0x52, 0xb5, 0x0d, 0xab, 0x8d, 0x1e, 0x41, 0x56, 0x2c, 0xac, - 0x29, 0x8a, 0x8c, 0xd7, 0x7a, 0xdf, 0x9b, 0x62, 0x1f, 0xf4, 0x9b, 0x2a, 0x0a, 0xe3, 0x29, 0x8e, - 0x03, 0x7c, 0x74, 0x04, 0x69, 0xd6, 0x21, 0xa6, 0xea, 0xc1, 0xb7, 0x12, 0xdb, 0x65, 0x92, 0x93, - 0x8d, 0x0e, 0x31, 0xc3, 0xb3, 0x21, 0xbe, 0xb0, 0x04, 0x42, 0x3f, 0x81, 0x39, 0xc6, 0x0d, 0xde, - 0x65, 0xaa, 0x03, 0x6f, 0x5f, 0x1e, 0x52, 0xaa, 0x85, 0x09, 0xea, 0x7d, 0x63, 0x05, 0x57, 0xfe, - 0xcb, 0x22, 0xa0, 0x3a, 0x6d, 0x8e, 0x5e, 0x54, 0xfe, 0x90, 0x82, 0x42, 0x87, 0x36, 0x23, 0x5b, - 0xa1, 0x2d, 0xc9, 0xd4, 0x79, 0x70, 0x89, 0x98, 0x8d, 0xc1, 0x09, 0xd2, 0x58, 0xfe, 0xde, 0x50, - 0x1e, 0x15, 0xe2, 0x4c, 0x3c, 0x62, 0x17, 0x7d, 0x91, 0x82, 0x05, 0x87, 0x36, 0x49, 0x83, 0xd8, - 0xc4, 0xe4, 0xd4, 0x55, 0x85, 0xfa, 0xde, 0x54, 0x8e, 0x1c, 0x46, 0x80, 0x3c, 0x37, 0x82, 0xfa, - 0x12, 0x65, 0xe1, 0x98, 0x45, 0xf4, 0x31, 0x20, 0x46, 0xdc, 0x9e, 0x65, 0x92, 0x5d, 0xd3, 0xa4, - 0x5d, 0x87, 0x47, 0xea, 0xd3, 0xba, 0xd2, 0x47, 0x8d, 0x31, 0x09, 0x9c, 0xa0, 0x85, 0xfe, 0x96, - 0x82, 0x9b, 0x71, 0x72, 0x34, 0xc8, 0xcb, 0x72, 0x6d, 0x8d, 0xa9, 0xd6, 0xd6, 0x98, 0x84, 0xea, - 0x2d, 0xf4, 0x4d, 0xe5, 0xe8, 0xcd, 0x89, 0x72, 0x78, 0xb2, 0x63, 0xa8, 0x09, 0x1b, 0x46, 0x97, - 0xd3, 0xb6, 0xa0, 0xc7, 0x01, 0x8e, 0xe9, 0x39, 0x71, 0x64, 0x5a, 0x66, 0xf5, 0xcd, 0xe1, 0xa0, - 0xb4, 0xb1, 0xfb, 0x02, 0x39, 0xfc, 0x42, 0x14, 0xf4, 0x36, 0x64, 0x45, 0xe0, 0x65, 0x78, 0xd3, - 0x32, 0xbc, 0xcb, 0xca, 0xeb, 0xec, 0xa1, 0xa2, 0xe3, 0x40, 0x02, 0x91, 0x49, 0x77, 0xbf, 0xef, - 0x25, 0x9e, 0x0e, 0xda, 0x9c, 0xee, 0xfa, 0xe7, 0xc0, 0xb2, 0xd5, 0x36, 0x5a, 0xa4, 0xde, 0xb5, - 0xed, 0x06, 0x31, 0x5d, 0xc2, 0xfd, 0x3a, 0x9a, 0x78, 0x77, 0xaf, 0x51, 0xd3, 0xaf, 0x0a, 0x61, - 0xed, 0xd4, 0xd4, 0x32, 0x96, 0x0f, 0x46, 0x90, 0xf0, 0x18, 0x36, 0xba, 0x07, 0x59, 0xe3, 0xf4, - 0xd4, 0x72, 0x2c, 0xde, 0x57, 0x57, 0xc4, 0x8d, 0x24, 0x3b, 0xbb, 0x4a, 0x46, 0x5f, 0x10, 0xe1, - 0xf1, 0xbf, 0x70, 0xa0, 0x8b, 0x3e, 0x84, 0x45, 0x66, 0x9e, 0x11, 0x91, 0x47, 0xae, 0x8c, 0x68, - 0x56, 0x46, 0x74, 0x4d, 0xb9, 0xb2, 0xd8, 0x88, 0x32, 0x71, 0x5c, 0x16, 0x7d, 0x02, 0x79, 0x4e, - 0x6d, 0xd1, 0x62, 0x65, 0x5e, 0x7a, 0x37, 0xc1, 0x62, 0x92, 0x1f, 0xc7, 0x81, 0x58, 0xd8, 0x92, - 0x42, 0x1a, 0xc3, 0x51, 0x1c, 0x74, 0x1f, 0x56, 0x3a, 0xae, 0x45, 0x65, 0x78, 0xc5, 0x95, 0x4e, - 0xfa, 0x05, 0xd2, 0xaf, 0xb0, 0xb0, 0x8e, 0x0a, 0xe0, 0x71, 0x1d, 0xb4, 0x05, 0x59, 0x9f, 0xa8, - 0xe5, 0xe5, 0xa5, 0x4f, 0x86, 0xc1, 0xd7, 0xc5, 0x01, 0x17, 0x35, 0x23, 0x8f, 0x98, 0xfb, 0x06, - 0x27, 0x4c, 0x5b, 0x90, 0x8b, 0xf9, 0xee, 0x84, 0x24, 0xc1, 0x51, 0xe1, 0xb0, 0x4a, 0xc5, 0xc8, - 0x0c, 0x8f, 0x60, 0xa2, 0x1f, 0xc1, 0xb2, 0xeb, 0x9d, 0xc7, 0x70, 0x5d, 0x8b, 0xde, 0x05, 0x46, - 0x6c, 0x3b, 0x1e, 0xe1, 0xe1, 0x31, 0x69, 0x74, 0x0f, 0x10, 0x71, 0x8c, 0x13, 0x9b, 0xa8, 0x83, - 0x51, 0xb3, 0x9c, 0x73, 0xa6, 0x15, 0xe4, 0xb9, 0xba, 0x21, 0x0a, 0xcc, 0xfe, 0x18, 0x17, 0x27, - 0x68, 0xac, 0xef, 0xc2, 0x6a, 0x42, 0xb9, 0xbd, 0x52, 0x13, 0xfe, 0x08, 0x56, 0xc6, 0x0a, 0xe5, - 0x95, 0x00, 0x6a, 0x50, 0x7c, 0x71, 0x35, 0xba, 0x52, 0x4f, 0xff, 0x7b, 0x01, 0xe6, 0xc5, 0xe9, - 0x15, 0x8d, 0x30, 0xb9, 0x14, 0xa7, 0xa6, 0x2a, 0xc5, 0xdd, 0x91, 0xc6, 0xe2, 0x5d, 0xcd, 0x3f, - 0xbc, 0x54, 0xf1, 0x15, 0xce, 0x4c, 0xd9, 0x4d, 0xa2, 0xe7, 0x7b, 0xf6, 0x55, 0x9e, 0xef, 0xf4, - 0xf4, 0xe7, 0x3b, 0xf3, 0x8a, 0xce, 0xf7, 0xd7, 0x5d, 0x2b, 0x13, 0xeb, 0xc9, 0xfc, 0x4b, 0xd6, - 0x93, 0xec, 0x0b, 0xeb, 0xc9, 0x0f, 0x20, 0x7f, 0x46, 0x19, 0x3f, 0x24, 0xfc, 0x31, 0x75, 0xcf, - 0xb5, 0x9c, 0x3c, 0xa0, 0x41, 0x64, 0x1e, 0x84, 0x2c, 0x1c, 0x95, 0x43, 0x6f, 0xc1, 0xbc, 0xf8, - 0xac, 0x1f, 0xec, 0xc9, 0x7a, 0x97, 0x0d, 0x5f, 0xdf, 0x0f, 0x3c, 0x32, 0xf6, 0xf9, 0xbe, 0xe8, - 0x41, 0xbd, 0x2a, 0x4b, 0xdb, 0x88, 0xe8, 0x41, 0xbd, 0x8a, 0x7d, 0x3e, 0x3a, 0x82, 0x35, 0x76, - 0x66, 0xb8, 0xa4, 0xee, 0x52, 0x93, 0x78, 0x4b, 0xf1, 0x5e, 0x41, 0x0b, 0x52, 0xf1, 0xe6, 0x70, - 0x50, 0x5a, 0x6b, 0x24, 0x09, 0xe0, 0x64, 0xbd, 0xa4, 0x9e, 0xba, 0xf8, 0x1a, 0x7a, 0xea, 0x11, - 0xe4, 0x9a, 0x0e, 0xab, 0x53, 0xdb, 0x32, 0xfb, 0xb2, 0xc6, 0xe5, 0xf4, 0x1d, 0xff, 0xc5, 0xb6, - 0x77, 0xd8, 0xf0, 0x18, 0xcf, 0x07, 0xa5, 0x8d, 0xf1, 0x39, 0x5d, 0x25, 0xe0, 0xe3, 0x10, 0x03, - 0x3d, 0x94, 0x80, 0x55, 0xea, 0x9c, 0x5a, 0x2d, 0x6d, 0x49, 0x7a, 0xbc, 0x39, 0xc1, 0xe3, 0xbd, - 0xc3, 0x86, 0x27, 0xe7, 0x4d, 0x19, 0x82, 0x4f, 0x1c, 0x22, 0xa0, 0x5f, 0x42, 0x41, 0x1c, 0xb2, - 0x60, 0x90, 0xe7, 0xdf, 0xcc, 0x12, 0xe7, 0x54, 0x81, 0x54, 0xd8, 0x2d, 0x0e, 0x62, 0xca, 0x78, - 0x04, 0x0c, 0x6d, 0x40, 0xda, 0x70, 0x5b, 0x4c, 0x5b, 0xd9, 0x9c, 0xdd, 0xca, 0x79, 0x13, 0xa2, - 0x5d, 0xb7, 0xc5, 0xb0, 0xa4, 0xfa, 0xd3, 0x17, 0x74, 0xf5, 0xe9, 0x4b, 0x7c, 0xc0, 0xb8, 0xfa, - 0x7a, 0x07, 0x8c, 0xd7, 0x5f, 0xc7, 0x80, 0x71, 0xed, 0x95, 0x0f, 0x18, 0x6f, 0xbc, 0xdc, 0x80, - 0xf1, 0x77, 0xa0, 0x99, 0xfe, 0xc6, 0x8d, 0xa4, 0xb5, 0xf6, 0xc6, 0xe5, 0x27, 0x8d, 0x1b, 0xc3, - 0x41, 0x29, 0x9c, 0x0b, 0x8f, 0x9e, 0x8f, 0x89, 0x26, 0x5e, 0xba, 0x15, 0x97, 0xff, 0x3c, 0x03, - 0x4b, 0x75, 0xda, 0x3c, 0x26, 0xed, 0x8e, 0x6d, 0x70, 0x22, 0x9b, 0xe8, 0x2f, 0xc6, 0x9e, 0xc2, - 0x6f, 0x5f, 0x65, 0x1e, 0xa5, 0x23, 0x95, 0x28, 0x90, 0xf8, 0xf8, 0xfd, 0x0c, 0x40, 0x2c, 0xc7, - 0xa5, 0xb6, 0x4d, 0x5c, 0xf5, 0x04, 0x9e, 0x12, 0xbf, 0x1a, 0xe0, 0xe0, 0x08, 0x26, 0xfa, 0xb1, - 0x7a, 0x5e, 0x7b, 0xdd, 0xf3, 0xad, 0x4b, 0x37, 0xec, 0xa4, 0xa7, 0x75, 0xf9, 0x9f, 0x29, 0x58, - 0x1a, 0x7d, 0xfe, 0x1e, 0xc1, 0x6c, 0x87, 0x36, 0x55, 0x6c, 0x6e, 0x4f, 0xf3, 0x1a, 0xd3, 0xe7, - 0xc5, 0xb9, 0x14, 0x74, 0x81, 0x84, 0x5a, 0x90, 0x0b, 0xb6, 0x58, 0x85, 0xe4, 0x83, 0x8b, 0x61, - 0x27, 0xfd, 0x1f, 0x41, 0x8d, 0x47, 0x03, 0x6e, 0x88, 0x5d, 0xfe, 0x3d, 0xe4, 0xd5, 0xed, 0xa7, - 0x4e, 0x5d, 0x7e, 0x89, 0xa9, 0xdb, 0x26, 0xa4, 0x3b, 0xd4, 0xe5, 0x6a, 0xee, 0x1a, 0x48, 0x08, - 0x6d, 0x2c, 0x39, 0xfe, 0xa3, 0x4c, 0x50, 0x64, 0xc4, 0x33, 0xf1, 0x47, 0x99, 0x94, 0x0c, 0x24, - 0xca, 0xff, 0xcd, 0x04, 0x1e, 0xc8, 0x5c, 0xc3, 0x90, 0x11, 0x28, 0xfe, 0x7c, 0xf5, 0xd6, 0xc5, - 0xab, 0x8e, 0xf8, 0xaf, 0x2f, 0x2a, 0x4b, 0x19, 0xf1, 0xc5, 0xb0, 0x07, 0x85, 0xb6, 0x21, 0x67, - 0xda, 0x5d, 0xc6, 0x89, 0x7b, 0x50, 0x57, 0xcf, 0xf0, 0xa0, 0x76, 0x55, 0x7d, 0x06, 0x0e, 0x65, - 0x90, 0x0e, 0x69, 0xde, 0xef, 0xf8, 0xb3, 0xc1, 0x8a, 0xbf, 0xc8, 0xe3, 0x7e, 0x87, 0x3c, 0x1f, - 0x94, 0x8a, 0x09, 0x4d, 0x46, 0x39, 0x21, 0x24, 0xb0, 0xd4, 0x45, 0x3b, 0x90, 0x27, 0x4f, 0x38, - 0x71, 0x1d, 0xc3, 0x3e, 0xa8, 0x7b, 0x83, 0xc3, 0x9c, 0xbe, 0x24, 0x7a, 0xfe, 0x7e, 0x48, 0xc6, - 0x51, 0x19, 0x74, 0x17, 0x0a, 0x36, 0x35, 0x9a, 0xba, 0x61, 0x1b, 0x8e, 0x29, 0x9d, 0xcd, 0x48, - 0x07, 0x82, 0x36, 0x51, 0x8b, 0x71, 0xf1, 0x88, 0x34, 0xfa, 0x29, 0x68, 0x51, 0x8a, 0x37, 0xb6, - 0xc7, 0x86, 0xd3, 0x52, 0x93, 0xbc, 0x9c, 0x57, 0x56, 0x6a, 0x13, 0x64, 0xf0, 0x44, 0x6d, 0xf4, - 0xc7, 0x14, 0xac, 0xf9, 0x9e, 0x1e, 0xbb, 0xe2, 0x4a, 0x69, 0xaa, 0x66, 0xec, 0x5d, 0x9e, 0x8e, - 0x95, 0x87, 0x6b, 0xfb, 0x49, 0x42, 0xcf, 0x07, 0xa5, 0xf7, 0x26, 0xc7, 0x2c, 0x51, 0x45, 0x06, - 0x32, 0xd9, 0x24, 0x7a, 0x08, 0xab, 0x67, 0xc4, 0xb0, 0xf9, 0x59, 0xf5, 0x8c, 0x98, 0xe7, 0x7e, - 0x4e, 0xa9, 0x6b, 0xd8, 0xb7, 0x94, 0x27, 0xab, 0x0f, 0xc6, 0x45, 0x70, 0x92, 0x1e, 0xfa, 0x1c, - 0xd6, 0x18, 0x61, 0xcc, 0xa2, 0x8e, 0x7f, 0x69, 0x56, 0xd7, 0x82, 0x9c, 0x5f, 0x2e, 0x92, 0xca, - 0x75, 0x82, 0x82, 0xba, 0x3e, 0x25, 0xb1, 0x70, 0xb2, 0x89, 0xf2, 0x3f, 0x52, 0xb0, 0xea, 0xa7, - 0xce, 0xd7, 0x57, 0x71, 0xc7, 0xc6, 0x8d, 0x97, 0x3c, 0x62, 0x93, 0x6a, 0xa2, 0xbe, 0xf5, 0xf4, - 0x59, 0xf1, 0xda, 0x97, 0xcf, 0x8a, 0xd7, 0xbe, 0x7a, 0x56, 0xbc, 0xf6, 0xc5, 0xb0, 0x98, 0x7a, - 0x3a, 0x2c, 0xa6, 0xbe, 0x1c, 0x16, 0x53, 0x5f, 0x0d, 0x8b, 0xa9, 0x7f, 0x0f, 0x8b, 0xa9, 0x3f, - 0xfd, 0xa7, 0x78, 0xed, 0xe7, 0x33, 0xbd, 0x9d, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x3a, - 0x0d, 0x85, 0xcc, 0x1d, 0x00, 0x00, + // 2185 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0x5f, 0x6f, 0x1b, 0xc7, + 0x11, 0x37, 0x25, 0x52, 0x22, 0x87, 0x12, 0x25, 0xad, 0x2c, 0xe7, 0xa4, 0xaa, 0xa4, 0xc2, 0x16, + 0x85, 0x83, 0xda, 0x54, 0xe4, 0xb8, 0x80, 0x93, 0xa0, 0x4e, 0x75, 0xb4, 0x6c, 0x2b, 0x95, 0x25, + 0x62, 0xa9, 0xa4, 0x7f, 0xd0, 0x3f, 0x59, 0x1d, 0x57, 0xd4, 0x59, 0xc7, 0x5b, 0xf6, 0x76, 0x29, + 0x9b, 0x29, 0x8a, 0xe6, 0xb1, 0x28, 0x50, 0xa0, 0x9f, 0xa0, 0xdf, 0xa0, 0x0f, 0x05, 0xfa, 0x11, + 0xfa, 0x60, 0xb4, 0x2f, 0x79, 0xcc, 0x13, 0x5b, 0xb3, 0xdf, 0xc2, 0x45, 0x81, 0x62, 0xf7, 0xf6, + 0xfe, 0x90, 0x3c, 0x5a, 0x12, 0x6d, 0xa7, 0x0f, 0x02, 0xb8, 0xf3, 0xe7, 0x37, 0xb3, 0xb3, 0xbb, + 0x33, 0x73, 0x23, 0x78, 0xf7, 0xb4, 0xc5, 0x1a, 0x1d, 0x87, 0xf2, 0xca, 0xd3, 0xee, 0xe7, 0x9b, + 0xec, 0xf8, 0x98, 0x9f, 0x30, 0x26, 0x6e, 0x92, 0xb6, 0xbd, 0x29, 0xff, 0xce, 0xb6, 0x36, 0x9b, + 0xd4, 0xa5, 0x1e, 0x11, 0xb4, 0x51, 0x69, 0x7b, 0x4c, 0x30, 0xb4, 0x11, 0xd7, 0xa8, 0x04, 0x1a, + 0xbf, 0x24, 0x6d, 0xbb, 0x22, 0xff, 0xce, 0xb6, 0xd6, 0x6e, 0x36, 0x6d, 0x71, 0xd2, 0x39, 0xaa, + 0x58, 0xac, 0xb5, 0xd9, 0x64, 0x4d, 0xb6, 0xa9, 0x14, 0x8f, 0x3a, 0xc7, 0x6a, 0xa5, 0x16, 0xea, + 0x97, 0x0f, 0xb8, 0x56, 0x3e, 0xbd, 0xc3, 0x2b, 0x36, 0x53, 0xf6, 0x2c, 0xe6, 0xd1, 0x04, 0xa3, + 0x6b, 0xb7, 0x23, 0x99, 0x16, 0xb1, 0x4e, 0x6c, 0x97, 0x7a, 0xdd, 0xcd, 0xf6, 0x69, 0x53, 0x12, + 0xf8, 0x66, 0x8b, 0x0a, 0x92, 0xa0, 0x55, 0xfe, 0x6f, 0x06, 0x8c, 0x2a, 0x73, 0x05, 0x91, 0xf2, + 0xb8, 0xe3, 0x0a, 0xbb, 0x45, 0xeb, 0x54, 0x08, 0xdb, 0x6d, 0x72, 0xf4, 0x13, 0xc8, 0x79, 0x94, + 0xb3, 0x8e, 0x67, 0x51, 0x6e, 0xa4, 0x36, 0x52, 0xd7, 0xf3, 0xb7, 0xae, 0x57, 0x7c, 0x33, 0x6a, + 0x23, 0xd2, 0x95, 0xca, 0xd9, 0x56, 0x05, 0x6b, 0x21, 0x4c, 0x7f, 0xd5, 0xb1, 0x3d, 0xda, 0xa2, + 0xae, 0xe0, 0xe6, 0xd2, 0xb3, 0x5e, 0xe9, 0x4a, 0xbf, 0x57, 0xca, 0x05, 0x5c, 0x8e, 0x23, 0x34, + 0x84, 0x61, 0xde, 0xb1, 0xcf, 0xa8, 0x4b, 0x39, 0xaf, 0x79, 0xec, 0x88, 0x1a, 0x53, 0x0a, 0x7e, + 0x35, 0x09, 0x5e, 0x09, 0x98, 0x4b, 0xfd, 0x5e, 0x69, 0x7e, 0x2f, 0xae, 0x83, 0x07, 0x21, 0xd0, + 0x27, 0x50, 0xf0, 0x28, 0x69, 0xd8, 0x11, 0xe8, 0xf4, 0x79, 0xa0, 0xa8, 0xdf, 0x2b, 0x15, 0xf0, + 0x80, 0x12, 0x1e, 0x02, 0x41, 0x1f, 0x43, 0xce, 0xb1, 0x8f, 0xa9, 0xd5, 0xb5, 0x1c, 0x6a, 0xa4, + 0x15, 0xe2, 0x37, 0x93, 0x10, 0xf7, 0x02, 0x21, 0x73, 0x5e, 0x6e, 0x3b, 0x5c, 0xe2, 0x48, 0x1d, + 0x1d, 0xc1, 0x02, 0xa7, 0x56, 0xc7, 0xb3, 0x45, 0x57, 0x46, 0x9d, 0x3e, 0x15, 0x46, 0x46, 0x21, + 0x7e, 0x2b, 0x09, 0xb1, 0x3e, 0x28, 0x6a, 0x2e, 0xf7, 0x7b, 0xa5, 0x85, 0x21, 0x22, 0x1e, 0x06, + 0x44, 0x7b, 0x90, 0x76, 0x6d, 0x8b, 0x1a, 0x33, 0x0a, 0xb8, 0x52, 0x39, 0xef, 0x32, 0x56, 0xf6, + 0x6d, 0x2b, 0x3c, 0x73, 0x33, 0xdb, 0xef, 0x95, 0xd2, 0x92, 0x82, 0x15, 0x0a, 0x3a, 0x84, 0x19, + 0x9b, 0x29, 0xbc, 0x59, 0x85, 0xf7, 0xee, 0xf9, 0x78, 0xbb, 0x07, 0x03, 0x88, 0xd0, 0xef, 0x95, + 0x66, 0x7c, 0x1a, 0xd6, 0x58, 0x68, 0x0f, 0x66, 0xa9, 0x7b, 0x76, 0xdf, 0x63, 0x2d, 0x23, 0xbb, + 0x31, 0x7d, 0x3d, 0x7f, 0xeb, 0xed, 0xa4, 0xfd, 0xef, 0xf8, 0x22, 0x75, 0x75, 0x67, 0xcc, 0x05, + 0x7d, 0xa1, 0x66, 0x35, 0x19, 0x07, 0x10, 0xe8, 0x7d, 0x98, 0xa6, 0xee, 0x99, 0x91, 0x53, 0x48, + 0x6b, 0x63, 0x90, 0x3e, 0x25, 0x9e, 0x99, 0xd7, 0x10, 0xd3, 0x3b, 0xee, 0x19, 0x96, 0x3a, 0xe5, + 0x5f, 0x40, 0x61, 0xd0, 0x5d, 0x54, 0x82, 0x8c, 0xe5, 0x10, 0xee, 0x5f, 0xf8, 0x8c, 0x99, 0xeb, + 0xf7, 0x4a, 0x99, 0xaa, 0x24, 0x60, 0x9f, 0x8e, 0xbe, 0x0b, 0x39, 0xf5, 0xe3, 0x1e, 0x11, 0x44, + 0x5d, 0xdb, 0x8c, 0x7f, 0xe0, 0xd5, 0x80, 0x88, 0x23, 0x7e, 0xf9, 0x2e, 0xcc, 0x0d, 0xa0, 0x57, + 0x00, 0x48, 0xe3, 0x71, 0x87, 0x0b, 0xf9, 0x48, 0xb4, 0x89, 0x42, 0xbf, 0x57, 0x82, 0xed, 0x90, + 0x8a, 0x63, 0x12, 0xe5, 0x7f, 0x4e, 0x01, 0x1c, 0x1c, 0x3d, 0xa6, 0x96, 0x78, 0x44, 0x05, 0x41, + 0x9f, 0xc1, 0x8c, 0x43, 0x8e, 0xa8, 0x23, 0xbd, 0x93, 0x9b, 0xbd, 0x73, 0xfe, 0x69, 0x44, 0xda, + 0x95, 0x3d, 0xa5, 0xba, 0xe3, 0x0a, 0xaf, 0x6b, 0x16, 0x74, 0x28, 0x66, 0x7c, 0x22, 0xd6, 0xb8, + 0x48, 0x40, 0x9e, 0xb8, 0x2e, 0x13, 0x44, 0xd8, 0xcc, 0xe5, 0xc6, 0x94, 0x32, 0xf3, 0xfd, 0x4b, + 0x99, 0xd9, 0x8e, 0xf4, 0x7d, 0x5b, 0xcb, 0xda, 0x56, 0x3e, 0xc6, 0xc1, 0x71, 0x33, 0x6b, 0xef, + 0x43, 0x3e, 0xe6, 0x1c, 0x5a, 0x84, 0xe9, 0x53, 0xda, 0x55, 0xe1, 0xc9, 0x61, 0xf9, 0x13, 0x5d, + 0x85, 0xcc, 0x19, 0x71, 0x3a, 0x7e, 0x9e, 0xc8, 0x61, 0x7f, 0xf1, 0xc1, 0xd4, 0x9d, 0xd4, 0xda, + 0x5d, 0x58, 0x1c, 0x36, 0x78, 0x19, 0xfd, 0xf2, 0x8b, 0x34, 0x2c, 0xd5, 0x88, 0x27, 0x6c, 0xe2, + 0xc4, 0x02, 0xbd, 0x01, 0x69, 0x97, 0xb4, 0xa8, 0x0f, 0x61, 0xce, 0xe9, 0x0d, 0xa4, 0xf7, 0x49, + 0x4b, 0x3e, 0x0c, 0xd2, 0xa2, 0xe8, 0x0e, 0xcc, 0x05, 0xc9, 0x54, 0x52, 0x7d, 0x60, 0xf3, 0xaa, + 0x96, 0x9c, 0x7b, 0x10, 0xe3, 0xe1, 0x01, 0x49, 0xb4, 0x09, 0x39, 0x89, 0xc0, 0xdb, 0xc4, 0xf2, + 0x53, 0x54, 0x2e, 0x4a, 0x96, 0xfb, 0x01, 0x03, 0x47, 0x32, 0xa8, 0x19, 0x9e, 0x7a, 0x5a, 0x1d, + 0xc7, 0x47, 0xe7, 0x1f, 0xc7, 0xc8, 0x8e, 0x2e, 0x74, 0xf8, 0xbf, 0x1e, 0x3c, 0xfc, 0x8c, 0xb2, + 0x76, 0x6f, 0x12, 0x6b, 0x97, 0xbf, 0x03, 0xe8, 0x09, 0x2c, 0xb0, 0x27, 0xb2, 0x0a, 0xd1, 0x63, + 0xea, 0x51, 0x57, 0xd6, 0x9c, 0x19, 0xe5, 0xc0, 0xed, 0xd8, 0x8b, 0x0e, 0x4b, 0x5b, 0xa5, 0x7d, + 0xda, 0x94, 0x04, 0x5e, 0x91, 0xa5, 0x4d, 0xdd, 0xc0, 0x01, 0x65, 0xf3, 0x2d, 0x6d, 0x70, 0x61, + 0x90, 0xce, 0xf1, 0xb0, 0x95, 0xff, 0xe7, 0xe5, 0xfb, 0xf3, 0x14, 0xac, 0xd4, 0xa8, 0xc7, 0x6d, + 0x2e, 0xa8, 0x2b, 0x3e, 0x65, 0x4e, 0xa7, 0x45, 0xab, 0x0e, 0xb1, 0x5b, 0xe8, 0x31, 0x64, 0xe5, + 0xc6, 0x1a, 0x32, 0xc9, 0xf8, 0xa5, 0xf7, 0xbd, 0x09, 0xce, 0xc1, 0x5c, 0xd5, 0x51, 0x18, 0xbd, + 0xe2, 0x38, 0xc4, 0x47, 0x07, 0x90, 0xe6, 0x6d, 0x6a, 0xe9, 0x1a, 0x7c, 0x33, 0xb1, 0x5c, 0x26, + 0x39, 0x59, 0x6f, 0x53, 0x2b, 0x7a, 0x1b, 0x72, 0x85, 0x15, 0x10, 0xfa, 0x11, 0xcc, 0x70, 0x41, + 0x44, 0x87, 0xeb, 0x0a, 0xbc, 0x79, 0x71, 0x48, 0xa5, 0x16, 0x5d, 0x50, 0x7f, 0x8d, 0x35, 0x5c, + 0xf9, 0x2f, 0x05, 0x40, 0x35, 0xd6, 0x18, 0x6e, 0x54, 0x7e, 0x97, 0x82, 0x42, 0x9b, 0x35, 0x62, + 0x47, 0xa1, 0xf3, 0xe3, 0xc3, 0x0b, 0xc4, 0x6c, 0x04, 0x4e, 0x92, 0x46, 0xee, 0xef, 0x35, 0xed, + 0x51, 0x61, 0x90, 0x89, 0x87, 0xec, 0xa2, 0x2f, 0x52, 0x30, 0xe7, 0xb2, 0x06, 0xad, 0x53, 0x87, + 0x5a, 0x82, 0x79, 0x3a, 0x83, 0xde, 0x9f, 0xc8, 0x91, 0xfd, 0x18, 0x90, 0xef, 0x46, 0x98, 0x5f, + 0xe2, 0x2c, 0x3c, 0x60, 0x11, 0x7d, 0x0c, 0x88, 0x53, 0xef, 0xcc, 0xb6, 0xe8, 0xb6, 0x65, 0xb1, + 0x8e, 0x2b, 0x54, 0x7e, 0xf2, 0x13, 0xcd, 0x9a, 0xd6, 0x47, 0xf5, 0x11, 0x09, 0x9c, 0xa0, 0x85, + 0xfe, 0x9a, 0x82, 0xd5, 0x41, 0x72, 0x3c, 0xc8, 0x7e, 0x3a, 0xaa, 0x4f, 0xb4, 0xb7, 0xfa, 0x38, + 0x54, 0x7f, 0xa3, 0x6f, 0x6b, 0x47, 0x57, 0xc7, 0xca, 0xe1, 0xf1, 0x8e, 0xa1, 0x06, 0xac, 0x93, + 0x8e, 0x60, 0x2d, 0x49, 0x1f, 0x04, 0x38, 0x64, 0xa7, 0xd4, 0x55, 0x4d, 0x57, 0xd6, 0xdc, 0xe8, + 0xf7, 0x4a, 0xeb, 0xdb, 0x2f, 0x91, 0xc3, 0x2f, 0x45, 0x41, 0x37, 0x20, 0x2b, 0x03, 0xaf, 0xc2, + 0x3b, 0xa3, 0xc2, 0xbb, 0xa8, 0xbd, 0xce, 0xee, 0x6b, 0x3a, 0x0e, 0x25, 0x10, 0x1d, 0xed, 0xfd, + 0xfc, 0x96, 0xea, 0x3b, 0x89, 0xaf, 0x83, 0x35, 0x26, 0x6b, 0xff, 0x5c, 0x58, 0xb4, 0x5b, 0xa4, + 0x49, 0x6b, 0x1d, 0xc7, 0xa9, 0x53, 0xcb, 0xa3, 0x82, 0xeb, 0x1e, 0x2b, 0xb1, 0x77, 0xdf, 0x63, + 0x56, 0x90, 0x15, 0xa2, 0xdc, 0x69, 0xe8, 0x6d, 0x2c, 0xee, 0x0e, 0x21, 0xe1, 0x11, 0x6c, 0x74, + 0x1f, 0xb2, 0xe4, 0xf8, 0xd8, 0x76, 0x6d, 0xd1, 0x35, 0x72, 0x6a, 0x3f, 0xeb, 0x49, 0x76, 0xb6, + 0xb5, 0x8c, 0x39, 0x27, 0xc3, 0x13, 0xac, 0x70, 0xa8, 0x8b, 0x3e, 0x84, 0x79, 0x6e, 0x9d, 0x50, + 0x79, 0x8f, 0x3c, 0x15, 0x51, 0x50, 0x11, 0x5d, 0xd1, 0xae, 0xcc, 0xd7, 0xe3, 0x4c, 0x3c, 0x28, + 0x8b, 0x3e, 0x81, 0xbc, 0x60, 0x8e, 0x2c, 0xb1, 0xea, 0x5e, 0xe6, 0xd5, 0x7e, 0x8b, 0x49, 0x7e, + 0x1c, 0x86, 0x62, 0x51, 0x49, 0x8a, 0x68, 0x1c, 0xc7, 0x71, 0xd0, 0x03, 0x58, 0x6a, 0x7b, 0x36, + 0x53, 0xe1, 0x95, 0x2d, 0x9d, 0xf2, 0x6b, 0x4e, 0xf9, 0x15, 0x25, 0xd6, 0x61, 0x01, 0x3c, 0xaa, + 0x83, 0xae, 0x43, 0x36, 0x20, 0x1a, 0xf3, 0xaa, 0xe9, 0x53, 0x61, 0x08, 0x74, 0x71, 0xc8, 0x45, + 0x8d, 0xd8, 0x47, 0xcc, 0x03, 0x22, 0x28, 0x37, 0x0a, 0x6a, 0x33, 0xdf, 0x1e, 0x73, 0x49, 0x70, + 0x5c, 0x38, 0xca, 0x52, 0x03, 0x64, 0x8e, 0x87, 0x30, 0xd1, 0x0f, 0x60, 0xd1, 0xf3, 0xdf, 0x63, + 0xb4, 0xaf, 0x05, 0xbf, 0x81, 0x91, 0xc7, 0x8e, 0x87, 0x78, 0x78, 0x44, 0x1a, 0xdd, 0x07, 0x44, + 0x5d, 0x72, 0xe4, 0x50, 0xfd, 0x30, 0xf6, 0x6c, 0xf7, 0x94, 0x1b, 0x8b, 0xea, 0x5d, 0x5d, 0x93, + 0x09, 0x66, 0x67, 0x84, 0x8b, 0x13, 0x34, 0xd0, 0x1f, 0x52, 0xb0, 0x2a, 0x58, 0x9b, 0x39, 0xac, + 0xd9, 0xad, 0xb7, 0xa5, 0x9b, 0x55, 0xe6, 0x72, 0xe1, 0x11, 0xdb, 0x15, 0xdc, 0x58, 0x52, 0x7b, + 0xbf, 0x91, 0x7c, 0x90, 0xc9, 0x4a, 0x51, 0xe6, 0x18, 0x27, 0xc1, 0xf1, 0x78, 0x8b, 0x6b, 0xdb, + 0xb0, 0x9c, 0x90, 0xfe, 0x2f, 0xd5, 0x14, 0x7c, 0x04, 0x4b, 0x23, 0x89, 0xfb, 0x52, 0x00, 0x7b, + 0x50, 0x7c, 0x79, 0x76, 0xbc, 0x54, 0x8f, 0xf1, 0xf7, 0x05, 0x98, 0x95, 0xd9, 0x44, 0x16, 0xe6, + 0xe4, 0xd2, 0x90, 0x9a, 0xa8, 0x34, 0x74, 0x12, 0x0b, 0xdd, 0x87, 0x17, 0x2a, 0x06, 0xd2, 0x99, + 0x09, 0xab, 0x5b, 0x3c, 0xdf, 0x4c, 0xbf, 0xce, 0x7c, 0x93, 0x9e, 0x3c, 0xdf, 0x64, 0x5e, 0x53, + 0xbe, 0x49, 0xca, 0xdd, 0x33, 0x6f, 0x30, 0x77, 0x27, 0xe6, 0xb7, 0xd9, 0x57, 0xcc, 0x6f, 0xd9, + 0x97, 0xe6, 0xb7, 0xef, 0x41, 0xfe, 0x84, 0x71, 0xb1, 0x4f, 0xc5, 0x13, 0xe6, 0x9d, 0xaa, 0x8a, + 0x91, 0x8d, 0x22, 0xf3, 0x30, 0x62, 0xe1, 0xb8, 0x1c, 0x7a, 0x07, 0x66, 0xe5, 0xb2, 0xb6, 0x7b, + 0x4f, 0xd5, 0x85, 0x6c, 0x34, 0x0d, 0x78, 0xe8, 0x93, 0x71, 0xc0, 0x0f, 0x44, 0x77, 0x6b, 0x55, + 0x23, 0x3f, 0x2a, 0xba, 0x5b, 0xab, 0xe2, 0x80, 0x8f, 0x0e, 0x60, 0x85, 0x9f, 0x10, 0x8f, 0xd6, + 0x3c, 0x66, 0x51, 0x7f, 0x2b, 0xfe, 0x57, 0xd9, 0x9c, 0x52, 0x5c, 0xed, 0xf7, 0x4a, 0x2b, 0xf5, + 0x24, 0x01, 0x9c, 0xac, 0x97, 0x54, 0xe3, 0xe7, 0xdf, 0x40, 0x8d, 0x3f, 0x80, 0x5c, 0xc3, 0xe5, + 0x35, 0xe6, 0xd8, 0x56, 0xd7, 0x28, 0xa8, 0xf3, 0xda, 0x0a, 0xbe, 0x20, 0xef, 0xed, 0xd7, 0x7d, + 0xc6, 0x8b, 0x5e, 0x69, 0x7d, 0x74, 0x6e, 0x58, 0x09, 0xf9, 0x38, 0xc2, 0x40, 0x8f, 0x14, 0x60, + 0x95, 0xb9, 0xc7, 0x76, 0x53, 0x15, 0x82, 0xfc, 0xad, 0x8d, 0x31, 0x1e, 0xdf, 0xdb, 0xaf, 0xfb, + 0x72, 0xfe, 0xd4, 0x23, 0x5c, 0xe2, 0x08, 0x01, 0xfd, 0x1c, 0x0a, 0xf2, 0x91, 0x85, 0x83, 0x45, + 0x59, 0x18, 0xa6, 0xc7, 0xcd, 0xcd, 0x42, 0xa9, 0xa8, 0x7a, 0xed, 0x0e, 0x28, 0xe3, 0x21, 0x30, + 0xb4, 0x0e, 0x69, 0xe2, 0x35, 0xfd, 0xea, 0x90, 0xf3, 0x27, 0x56, 0xdb, 0x5e, 0x93, 0x63, 0x45, + 0x0d, 0xa6, 0x41, 0xe8, 0xf2, 0xd3, 0xa0, 0xc1, 0x81, 0xe7, 0xf2, 0x9b, 0x1d, 0x78, 0x5e, 0x7d, + 0x13, 0x03, 0xcf, 0x95, 0xd7, 0x3e, 0xf0, 0xbc, 0xf6, 0x6a, 0x03, 0xcf, 0xdf, 0x80, 0x61, 0x05, + 0x07, 0x37, 0x74, 0xad, 0x8d, 0xb7, 0x2e, 0x3e, 0xf9, 0x5c, 0xef, 0xf7, 0x4a, 0xd1, 0x9c, 0x7a, + 0xf8, 0x7d, 0x8c, 0x35, 0x71, 0x4e, 0x77, 0x61, 0x7c, 0xed, 0xdd, 0xc5, 0xab, 0xb6, 0x06, 0xe5, + 0x3f, 0x4d, 0xc1, 0x42, 0x8d, 0x35, 0x0e, 0x69, 0xab, 0xed, 0x10, 0x41, 0x55, 0x51, 0xff, 0xd9, + 0xc8, 0xa8, 0xe0, 0xc6, 0x65, 0xe6, 0x75, 0x26, 0xd2, 0x5b, 0x82, 0xc4, 0xe1, 0xc0, 0x67, 0x00, + 0x32, 0xbc, 0x1e, 0x73, 0x1c, 0xea, 0xe9, 0x11, 0xc1, 0x84, 0xf8, 0xd5, 0x10, 0x07, 0xc7, 0x30, + 0xd1, 0x0f, 0xf5, 0xf8, 0xc1, 0xaf, 0xe6, 0xef, 0x5c, 0xb8, 0x81, 0x48, 0x1a, 0x3d, 0x94, 0xff, + 0x91, 0x82, 0x85, 0xe1, 0xf1, 0xc0, 0x01, 0x4c, 0xb7, 0x59, 0x43, 0xc7, 0xe6, 0xf6, 0x24, 0x5f, + 0xab, 0xe6, 0xac, 0xcc, 0x13, 0x92, 0x2e, 0x91, 0x50, 0x13, 0x72, 0xe1, 0x95, 0xd3, 0x21, 0xf9, + 0xe0, 0x7c, 0xd8, 0x71, 0xff, 0x67, 0xd1, 0xe3, 0xe3, 0x90, 0x1b, 0x61, 0x97, 0x7f, 0x0b, 0x79, + 0xdd, 0x8d, 0xd5, 0x98, 0x27, 0x2e, 0x30, 0x95, 0xdc, 0x80, 0x74, 0x9b, 0x79, 0x42, 0xcf, 0xa5, + 0x43, 0x09, 0xa9, 0x8d, 0x15, 0x27, 0xf8, 0x68, 0x95, 0x14, 0x15, 0xf1, 0xcc, 0xe0, 0x47, 0xab, + 0x92, 0x0c, 0x25, 0xca, 0xff, 0xc9, 0x84, 0x1e, 0xa8, 0xbb, 0x86, 0x21, 0x23, 0x51, 0x82, 0xf9, + 0xca, 0xcd, 0xf3, 0x77, 0x1d, 0xf3, 0xdf, 0x9c, 0xd7, 0x96, 0x32, 0x72, 0xc5, 0xb1, 0x0f, 0x85, + 0x36, 0x21, 0x67, 0x39, 0x1d, 0x2e, 0xa8, 0xb7, 0x5b, 0xd3, 0x63, 0xd4, 0x30, 0x97, 0x56, 0x03, + 0x06, 0x8e, 0x64, 0x90, 0x09, 0x69, 0xd1, 0x6d, 0x07, 0x23, 0x8d, 0x4a, 0xb0, 0xc9, 0xc3, 0x6e, + 0x9b, 0xbe, 0xe8, 0x95, 0x8a, 0x09, 0x45, 0x4f, 0x3b, 0x21, 0x25, 0xb0, 0xd2, 0x45, 0x5b, 0x90, + 0xa7, 0x4f, 0x05, 0xf5, 0x5c, 0xe2, 0xec, 0xd6, 0xfc, 0x49, 0x46, 0xce, 0x5c, 0x90, 0x3d, 0xc8, + 0x4e, 0x44, 0xc6, 0x71, 0x19, 0x74, 0x17, 0x0a, 0x0e, 0x23, 0x0d, 0x93, 0x38, 0xc4, 0xb5, 0x94, + 0xb3, 0x19, 0xe5, 0x40, 0x58, 0xb6, 0xf6, 0x06, 0xb8, 0x78, 0x48, 0x1a, 0xfd, 0x18, 0x8c, 0x38, + 0xc5, 0xff, 0xb7, 0x06, 0x26, 0x6e, 0x53, 0x4f, 0x3a, 0x73, 0x7e, 0x9a, 0xdb, 0x1b, 0x23, 0x83, + 0xc7, 0x6a, 0xa3, 0xdf, 0xa7, 0x60, 0x25, 0xf0, 0xf4, 0xd0, 0x93, 0x2d, 0xae, 0xa5, 0x9b, 0x03, + 0xbf, 0x99, 0x3b, 0xd4, 0x1e, 0xae, 0xec, 0x24, 0x09, 0xbd, 0xe8, 0x95, 0xde, 0x1b, 0x1f, 0xb3, + 0x44, 0x15, 0x15, 0xc8, 0x64, 0x93, 0xe8, 0x11, 0x2c, 0x9f, 0x50, 0xe2, 0x88, 0x93, 0xea, 0x09, + 0xb5, 0x4e, 0x83, 0x3b, 0xa5, 0xdb, 0xc2, 0x6f, 0x68, 0x4f, 0x96, 0x1f, 0x8e, 0x8a, 0xe0, 0x24, + 0x3d, 0xf4, 0x39, 0xac, 0x70, 0xca, 0xb9, 0xcd, 0xdc, 0xa0, 0x89, 0xd7, 0x6d, 0x4a, 0x2e, 0x48, + 0x17, 0x49, 0xe5, 0x23, 0x41, 0x41, 0xb7, 0x73, 0x49, 0x2c, 0x9c, 0x6c, 0xa2, 0xfc, 0xb7, 0x14, + 0x2c, 0x07, 0x57, 0xe7, 0xeb, 0xcb, 0xb8, 0x23, 0xe3, 0xd8, 0x0b, 0x3e, 0xb1, 0x71, 0x39, 0xd1, + 0xbc, 0xfe, 0xec, 0x79, 0xf1, 0xca, 0x97, 0xcf, 0x8b, 0x57, 0xbe, 0x7a, 0x5e, 0xbc, 0xf2, 0x45, + 0xbf, 0x98, 0x7a, 0xd6, 0x2f, 0xa6, 0xbe, 0xec, 0x17, 0x53, 0x5f, 0xf5, 0x8b, 0xa9, 0x7f, 0xf5, + 0x8b, 0xa9, 0x3f, 0xfe, 0xbb, 0x78, 0xe5, 0xa7, 0x53, 0x67, 0x5b, 0xff, 0x0b, 0x00, 0x00, 0xff, + 0xff, 0xd3, 0xb0, 0xf5, 0x35, 0xec, 0x1e, 0x00, 0x00, } func (m *ContainerRuntimeSettings) Marshal() (dAtA []byte, err error) { @@ -1013,54 +1016,20 @@ func (m *PodRuntimeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.ServiceAccountAnnotations) > 0 { - keysForServiceAccountAnnotations := make([]string, 0, len(m.ServiceAccountAnnotations)) - for k := range m.ServiceAccountAnnotations { - keysForServiceAccountAnnotations = append(keysForServiceAccountAnnotations, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForServiceAccountAnnotations) - for iNdEx := len(keysForServiceAccountAnnotations) - 1; iNdEx >= 0; iNdEx-- { - v := m.ServiceAccountAnnotations[string(keysForServiceAccountAnnotations[iNdEx])] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(keysForServiceAccountAnnotations[iNdEx]) - copy(dAtA[i:], keysForServiceAccountAnnotations[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(keysForServiceAccountAnnotations[iNdEx]))) - i-- - dAtA[i] = 0xa - i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + if len(m.TopologySpreadConstraints) > 0 { + for iNdEx := len(m.TopologySpreadConstraints) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TopologySpreadConstraints[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x1 i-- - dAtA[i] = 0x82 - } - } - if len(m.PodAnnotations) > 0 { - keysForPodAnnotations := make([]string, 0, len(m.PodAnnotations)) - for k := range m.PodAnnotations { - keysForPodAnnotations = append(keysForPodAnnotations, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForPodAnnotations) - for iNdEx := len(keysForPodAnnotations) - 1; iNdEx >= 0; iNdEx-- { - v := m.PodAnnotations[string(keysForPodAnnotations[iNdEx])] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(keysForPodAnnotations[iNdEx]) - copy(dAtA[i:], keysForPodAnnotations[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(keysForPodAnnotations[iNdEx]))) - i-- - dAtA[i] = 0xa - i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x7a + dAtA[i] = 0x8a } } if m.EnableServiceLinks != nil { @@ -1071,14 +1040,16 @@ func (m *PodRuntimeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- - dAtA[i] = 0x70 + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 } if m.RuntimeClassName != nil { i -= len(*m.RuntimeClassName) copy(dAtA[i:], *m.RuntimeClassName) i = encodeVarintGenerated(dAtA, i, uint64(len(*m.RuntimeClassName))) i-- - dAtA[i] = 0x6a + dAtA[i] = 0x7a } if len(m.ReadinessGates) > 0 { for iNdEx := len(m.ReadinessGates) - 1; iNdEx >= 0; iNdEx-- { @@ -1091,19 +1062,19 @@ func (m *PodRuntimeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x62 + dAtA[i] = 0x72 } } if m.Priority != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.Priority)) i-- - dAtA[i] = 0x58 + dAtA[i] = 0x68 } i -= len(m.PriorityClassName) copy(dAtA[i:], m.PriorityClassName) i = encodeVarintGenerated(dAtA, i, uint64(len(m.PriorityClassName))) i-- - dAtA[i] = 0x52 + dAtA[i] = 0x62 if len(m.Tolerations) > 0 { for iNdEx := len(m.Tolerations) - 1; iNdEx >= 0; iNdEx-- { { @@ -1115,14 +1086,14 @@ func (m *PodRuntimeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x4a + dAtA[i] = 0x5a } } i -= len(m.SchedulerName) copy(dAtA[i:], m.SchedulerName) i = encodeVarintGenerated(dAtA, i, uint64(len(m.SchedulerName))) i-- - dAtA[i] = 0x42 + dAtA[i] = 0x52 if m.Affinity != nil { { size, err := m.Affinity.MarshalToSizedBuffer(dAtA[:i]) @@ -1133,7 +1104,7 @@ func (m *PodRuntimeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x3a + dAtA[i] = 0x4a } if len(m.ImagePullSecrets) > 0 { for iNdEx := len(m.ImagePullSecrets) - 1; iNdEx >= 0; iNdEx-- { @@ -1146,7 +1117,7 @@ func (m *PodRuntimeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x32 + dAtA[i] = 0x42 } } if m.SecurityContext != nil { @@ -1159,13 +1130,13 @@ func (m *PodRuntimeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a + dAtA[i] = 0x3a } i -= len(m.NodeName) copy(dAtA[i:], m.NodeName) i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeName))) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x32 if m.AutomountServiceAccountToken != nil { i-- if *m.AutomountServiceAccountToken { @@ -1174,13 +1145,37 @@ func (m *PodRuntimeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- - dAtA[i] = 0x18 + dAtA[i] = 0x28 + } + if len(m.ServiceAccountAnnotations) > 0 { + keysForServiceAccountAnnotations := make([]string, 0, len(m.ServiceAccountAnnotations)) + for k := range m.ServiceAccountAnnotations { + keysForServiceAccountAnnotations = append(keysForServiceAccountAnnotations, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForServiceAccountAnnotations) + for iNdEx := len(keysForServiceAccountAnnotations) - 1; iNdEx >= 0; iNdEx-- { + v := m.ServiceAccountAnnotations[string(keysForServiceAccountAnnotations[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForServiceAccountAnnotations[iNdEx]) + copy(dAtA[i:], keysForServiceAccountAnnotations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForServiceAccountAnnotations[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x22 + } } i -= len(m.ServiceAccountName) copy(dAtA[i:], m.ServiceAccountName) i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceAccountName))) i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a if len(m.NodeSelector) > 0 { keysForNodeSelector := make([]string, 0, len(m.NodeSelector)) for k := range m.NodeSelector { @@ -1202,6 +1197,30 @@ func (m *PodRuntimeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0xa i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) i-- + dAtA[i] = 0x12 + } + } + if len(m.PodAnnotations) > 0 { + keysForPodAnnotations := make([]string, 0, len(m.PodAnnotations)) + for k := range m.PodAnnotations { + keysForPodAnnotations = append(keysForPodAnnotations, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForPodAnnotations) + for iNdEx := len(keysForPodAnnotations) - 1; iNdEx >= 0; iNdEx-- { + v := m.PodAnnotations[string(keysForPodAnnotations[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForPodAnnotations[iNdEx]) + copy(dAtA[i:], keysForPodAnnotations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForPodAnnotations[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- dAtA[i] = 0xa } } @@ -1228,6 +1247,22 @@ func (m *PodSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.TopologySpreadConstraints) > 0 { + for iNdEx := len(m.TopologySpreadConstraints) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TopologySpreadConstraints[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + } + } if m.ContainerSecurityContext != nil { { size, err := m.ContainerSecurityContext.MarshalToSizedBuffer(dAtA[:i]) @@ -1924,6 +1959,14 @@ func (m *PodRuntimeSettings) Size() (n int) { } var l int _ = l + if len(m.PodAnnotations) > 0 { + for k, v := range m.PodAnnotations { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } if len(m.NodeSelector) > 0 { for k, v := range m.NodeSelector { _ = k @@ -1934,6 +1977,14 @@ func (m *PodRuntimeSettings) Size() (n int) { } l = len(m.ServiceAccountName) n += 1 + l + sovGenerated(uint64(l)) + if len(m.ServiceAccountAnnotations) > 0 { + for k, v := range m.ServiceAccountAnnotations { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } if m.AutomountServiceAccountToken != nil { n += 2 } @@ -1977,22 +2028,12 @@ func (m *PodRuntimeSettings) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } if m.EnableServiceLinks != nil { - n += 2 - } - if len(m.PodAnnotations) > 0 { - for k, v := range m.PodAnnotations { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } + n += 3 } - if len(m.ServiceAccountAnnotations) > 0 { - for k, v := range m.ServiceAccountAnnotations { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 2 + sovGenerated(uint64(mapEntrySize)) + if len(m.TopologySpreadConstraints) > 0 { + for _, e := range m.TopologySpreadConstraints { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) } } return n @@ -2089,6 +2130,12 @@ func (m *PodSpec) Size() (n int) { l = m.ContainerSecurityContext.Size() n += 2 + l + sovGenerated(uint64(l)) } + if len(m.TopologySpreadConstraints) > 0 { + for _, e := range m.TopologySpreadConstraints { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } return n } @@ -2347,16 +2394,11 @@ func (this *PodRuntimeSettings) String() string { repeatedStringForReadinessGates += fmt.Sprintf("%v", f) + "," } repeatedStringForReadinessGates += "}" - keysForNodeSelector := make([]string, 0, len(this.NodeSelector)) - for k := range this.NodeSelector { - keysForNodeSelector = append(keysForNodeSelector, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) - mapStringForNodeSelector := "map[string]string{" - for _, k := range keysForNodeSelector { - mapStringForNodeSelector += fmt.Sprintf("%v: %v,", k, this.NodeSelector[k]) + repeatedStringForTopologySpreadConstraints := "[]TopologySpreadConstraint{" + for _, f := range this.TopologySpreadConstraints { + repeatedStringForTopologySpreadConstraints += fmt.Sprintf("%v", f) + "," } - mapStringForNodeSelector += "}" + repeatedStringForTopologySpreadConstraints += "}" keysForPodAnnotations := make([]string, 0, len(this.PodAnnotations)) for k := range this.PodAnnotations { keysForPodAnnotations = append(keysForPodAnnotations, k) @@ -2367,6 +2409,16 @@ func (this *PodRuntimeSettings) String() string { mapStringForPodAnnotations += fmt.Sprintf("%v: %v,", k, this.PodAnnotations[k]) } mapStringForPodAnnotations += "}" + keysForNodeSelector := make([]string, 0, len(this.NodeSelector)) + for k := range this.NodeSelector { + keysForNodeSelector = append(keysForNodeSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) + mapStringForNodeSelector := "map[string]string{" + for _, k := range keysForNodeSelector { + mapStringForNodeSelector += fmt.Sprintf("%v: %v,", k, this.NodeSelector[k]) + } + mapStringForNodeSelector += "}" keysForServiceAccountAnnotations := make([]string, 0, len(this.ServiceAccountAnnotations)) for k := range this.ServiceAccountAnnotations { keysForServiceAccountAnnotations = append(keysForServiceAccountAnnotations, k) @@ -2378,8 +2430,10 @@ func (this *PodRuntimeSettings) String() string { } mapStringForServiceAccountAnnotations += "}" s := strings.Join([]string{`&PodRuntimeSettings{`, + `PodAnnotations:` + mapStringForPodAnnotations + `,`, `NodeSelector:` + mapStringForNodeSelector + `,`, `ServiceAccountName:` + fmt.Sprintf("%v", this.ServiceAccountName) + `,`, + `ServiceAccountAnnotations:` + mapStringForServiceAccountAnnotations + `,`, `AutomountServiceAccountToken:` + valueToStringGenerated(this.AutomountServiceAccountToken) + `,`, `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, `SecurityContext:` + strings.Replace(fmt.Sprintf("%v", this.SecurityContext), "PodSecurityContext", "v1.PodSecurityContext", 1) + `,`, @@ -2392,8 +2446,7 @@ func (this *PodRuntimeSettings) String() string { `ReadinessGates:` + repeatedStringForReadinessGates + `,`, `RuntimeClassName:` + valueToStringGenerated(this.RuntimeClassName) + `,`, `EnableServiceLinks:` + valueToStringGenerated(this.EnableServiceLinks) + `,`, - `PodAnnotations:` + mapStringForPodAnnotations + `,`, - `ServiceAccountAnnotations:` + mapStringForServiceAccountAnnotations + `,`, + `TopologySpreadConstraints:` + repeatedStringForTopologySpreadConstraints + `,`, `}`, }, "") return s @@ -2422,6 +2475,11 @@ func (this *PodSpec) String() string { repeatedStringForEnv += fmt.Sprintf("%v", f) + "," } repeatedStringForEnv += "}" + repeatedStringForTopologySpreadConstraints := "[]TopologySpreadConstraint{" + for _, f := range this.TopologySpreadConstraints { + repeatedStringForTopologySpreadConstraints += fmt.Sprintf("%v", f) + "," + } + repeatedStringForTopologySpreadConstraints += "}" keysForNodeSelector := make([]string, 0, len(this.NodeSelector)) for k := range this.NodeSelector { keysForNodeSelector = append(keysForNodeSelector, k) @@ -2456,6 +2514,7 @@ func (this *PodSpec) String() string { `ReadinessProbe:` + strings.Replace(fmt.Sprintf("%v", this.ReadinessProbe), "Probe", "v1.Probe", 1) + `,`, `Lifecycle:` + strings.Replace(fmt.Sprintf("%v", this.Lifecycle), "Lifecycle", "v1.Lifecycle", 1) + `,`, `ContainerSecurityContext:` + strings.Replace(fmt.Sprintf("%v", this.ContainerSecurityContext), "SecurityContext", "v1.SecurityContext", 1) + `,`, + `TopologySpreadConstraints:` + repeatedStringForTopologySpreadConstraints + `,`, `}`, }, "") return s @@ -3982,7 +4041,7 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeSelector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PodAnnotations", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4009,8 +4068,8 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.NodeSelector == nil { - m.NodeSelector = make(map[string]string) + if m.PodAnnotations == nil { + m.PodAnnotations = make(map[string]string) } var mapkey string var mapvalue string @@ -4105,13 +4164,13 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.NodeSelector[mapkey] = mapvalue + m.PodAnnotations[mapkey] = mapvalue iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NodeSelector", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -4121,53 +4180,127 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.ServiceAccountName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AutomountServiceAccountToken", wireType) + if m.NodeSelector == nil { + m.NodeSelector = make(map[string]string) } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - } - b := bool(v != 0) - m.AutomountServiceAccountToken = &b - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NodeSelector[mapkey] = mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -4190,9 +4323,189 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.NodeName = string(dAtA[iNdEx:postIndex]) + m.ServiceAccountName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountAnnotations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ServiceAccountAnnotations == nil { + m.ServiceAccountAnnotations = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.ServiceAccountAnnotations[mapkey] = mapvalue iNdEx = postIndex case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AutomountServiceAccountToken", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.AutomountServiceAccountToken = &b + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NodeName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SecurityContext", wireType) } @@ -4228,7 +4541,7 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 6: + case 8: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ImagePullSecrets", wireType) } @@ -4262,7 +4575,7 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 7: + case 9: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Affinity", wireType) } @@ -4298,7 +4611,7 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 8: + case 10: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SchedulerName", wireType) } @@ -4330,7 +4643,7 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { } m.SchedulerName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 9: + case 11: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Tolerations", wireType) } @@ -4364,7 +4677,7 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 10: + case 12: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field PriorityClassName", wireType) } @@ -4396,7 +4709,7 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { } m.PriorityClassName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 11: + case 13: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Priority", wireType) } @@ -4416,7 +4729,7 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { } } m.Priority = &v - case 12: + case 14: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ReadinessGates", wireType) } @@ -4449,66 +4762,12 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { if err := m.ReadinessGates[len(m.ReadinessGates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeClassName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(dAtA[iNdEx:postIndex]) - m.RuntimeClassName = &s - iNdEx = postIndex - case 14: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EnableServiceLinks", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.EnableServiceLinks = &b + iNdEx = postIndex case 15: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PodAnnotations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeClassName", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -4518,122 +4777,49 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.PodAnnotations == nil { - m.PodAnnotations = make(map[string]string) + s := string(dAtA[iNdEx:postIndex]) + m.RuntimeClassName = &s + iNdEx = postIndex + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EnableServiceLinks", wireType) } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break } } - m.PodAnnotations[mapkey] = mapvalue - iNdEx = postIndex - case 16: + b := bool(v != 0) + m.EnableServiceLinks = &b + case 17: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountAnnotations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TopologySpreadConstraints", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4660,103 +4846,10 @@ func (m *PodRuntimeSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ServiceAccountAnnotations == nil { - m.ServiceAccountAnnotations = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } + m.TopologySpreadConstraints = append(m.TopologySpreadConstraints, v1.TopologySpreadConstraint{}) + if err := m.TopologySpreadConstraints[len(m.TopologySpreadConstraints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.ServiceAccountAnnotations[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -5617,6 +5710,40 @@ func (m *PodSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TopologySpreadConstraints", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TopologySpreadConstraints = append(m.TopologySpreadConstraints, v1.TopologySpreadConstraint{}) + if err := m.TopologySpreadConstraints[len(m.TopologySpreadConstraints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/kmodules.xyz/offshoot-api/api/v1/generated.proto b/vendor/kmodules.xyz/offshoot-api/api/v1/generated.proto index a20973a6f..ad7e415a6 100644 --- a/vendor/kmodules.xyz/offshoot-api/api/v1/generated.proto +++ b/vendor/kmodules.xyz/offshoot-api/api/v1/generated.proto @@ -205,58 +205,58 @@ message PersistentVolumeClaim { message PodRuntimeSettings { // PodAnnotations are the annotations that will be attached with the respective Pod // +optional - map podAnnotations = 15; + map podAnnotations = 1; // NodeSelector is a selector which must be true for the pod to fit on a node. // Selector which must match a node's labels for the pod to be scheduled on that node. // More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ // +optional - map nodeSelector = 1; + map nodeSelector = 2; // ServiceAccountName is the name of the ServiceAccount to use to run this pod. // More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ // +optional - optional string serviceAccountName = 2; + optional string serviceAccountName = 3; // ServiceAccountAnnotations are the annotations that will be attached with the respective ServiceAccount // +optional - map serviceAccountAnnotations = 16; + map serviceAccountAnnotations = 4; // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. // +optional - optional bool automountServiceAccountToken = 3; + optional bool automountServiceAccountToken = 5; // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, // the scheduler simply schedules this pod onto that node, assuming that it fits resource // requirements. // +optional - optional string nodeName = 4; + optional string nodeName = 6; // Security options the pod should run with. // More info: https://kubernetes.io/docs/concepts/policy/security-context/ // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ // +optional - optional k8s.io.api.core.v1.PodSecurityContext securityContext = 5; + optional k8s.io.api.core.v1.PodSecurityContext securityContext = 7; // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodRuntimeSettings. // If specified, these secrets will be passed to individual puller implementations for them to use. For example, // in the case of docker, only DockerConfig type secrets are honored. // More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod // +optional - repeated k8s.io.api.core.v1.LocalObjectReference imagePullSecrets = 6; + repeated k8s.io.api.core.v1.LocalObjectReference imagePullSecrets = 8; // If specified, the pod's scheduling constraints // +optional - optional k8s.io.api.core.v1.Affinity affinity = 7; + optional k8s.io.api.core.v1.Affinity affinity = 9; // If specified, the pod will be dispatched by specified scheduler. // If not specified, the pod will be dispatched by default scheduler. // +optional - optional string schedulerName = 8; + optional string schedulerName = 10; // If specified, the pod's tolerations. // +optional - repeated k8s.io.api.core.v1.Toleration tolerations = 9; + repeated k8s.io.api.core.v1.Toleration tolerations = 11; // If specified, indicates the pod's priority. "system-node-critical" and // "system-cluster-critical" are two special keywords which indicate the @@ -265,7 +265,7 @@ message PodRuntimeSettings { // If not specified, the pod priority will be default or zero if there is no // default. // +optional - optional string priorityClassName = 10; + optional string priorityClassName = 12; // The priority value. Various system components use this field to find the // priority of the pod. When Priority Admission Controller is enabled, it @@ -273,14 +273,14 @@ message PodRuntimeSettings { // this field from PriorityClassName. // The higher the value, the higher the priority. // +optional - optional int32 priority = 11; + optional int32 priority = 13; // If specified, all readiness gates will be evaluated for pod readiness. // A pod is ready when all its containers are ready AND // all conditions specified in the readiness gates have status equal to "True" // More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md // +optional - repeated k8s.io.api.core.v1.PodReadinessGate readinessGates = 12; + repeated k8s.io.api.core.v1.PodReadinessGate readinessGates = 14; // RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used // to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. @@ -289,13 +289,24 @@ message PodRuntimeSettings { // More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md // This is an alpha feature and may change in the future. // +optional - optional string runtimeClassName = 13; + optional string runtimeClassName = 15; // EnableServiceLinks indicates whether information about services should be injected into pod's // environment variables, matching the syntax of Docker links. // Optional: Defaults to true. // +optional - optional bool enableServiceLinks = 14; + optional bool enableServiceLinks = 16; + + // TopologySpreadConstraints describes how a group of pods ought to spread across topology + // domains. Scheduler will schedule pods in a way which abides by the constraints. + // All topologySpreadConstraints are ANDed. + // +optional + // +patchMergeKey=topologyKey + // +patchStrategy=merge + // +listType=map + // +listMapKey=topologyKey + // +listMapKey=whenUnsatisfiable + repeated k8s.io.api.core.v1.TopologySpreadConstraint topologySpreadConstraints = 17; } message PodSpec { @@ -458,6 +469,17 @@ message PodSpec { // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ // +optional optional k8s.io.api.core.v1.SecurityContext containerSecurityContext = 23; + + // TopologySpreadConstraints describes how a group of pods ought to spread across topology + // domains. Scheduler will schedule pods in a way which abides by the constraints. + // All topologySpreadConstraints are ANDed. + // +optional + // +patchMergeKey=topologyKey + // +patchStrategy=merge + // +listType=map + // +listMapKey=topologyKey + // +listMapKey=whenUnsatisfiable + repeated k8s.io.api.core.v1.TopologySpreadConstraint topologySpreadConstraints = 24; } // PodTemplateSpec describes the data a pod should have when created from a template diff --git a/vendor/kmodules.xyz/offshoot-api/api/v1/openapi_generated.go b/vendor/kmodules.xyz/offshoot-api/api/v1/openapi_generated.go index 35ba4cb33..40c8ac031 100644 --- a/vendor/kmodules.xyz/offshoot-api/api/v1/openapi_generated.go +++ b/vendor/kmodules.xyz/offshoot-api/api/v1/openapi_generated.go @@ -528,11 +528,36 @@ func schema_kmodulesxyz_offshoot_api_api_v1_PodRuntimeSettings(ref common.Refere Format: "", }, }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration"}, + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint"}, } } @@ -747,11 +772,36 @@ func schema_kmodulesxyz_offshoot_api_api_v1_PodSpec(ref common.ReferenceCallback Ref: ref("k8s.io/api/core/v1.SecurityContext"), }, }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.Toleration"}, + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint"}, } } diff --git a/vendor/kmodules.xyz/offshoot-api/api/v1/runtime_settings_types.go b/vendor/kmodules.xyz/offshoot-api/api/v1/runtime_settings_types.go index 73f1f179a..6005d47cf 100644 --- a/vendor/kmodules.xyz/offshoot-api/api/v1/runtime_settings_types.go +++ b/vendor/kmodules.xyz/offshoot-api/api/v1/runtime_settings_types.go @@ -31,48 +31,48 @@ type RuntimeSettings struct { type PodRuntimeSettings struct { // PodAnnotations are the annotations that will be attached with the respective Pod // +optional - PodAnnotations map[string]string `json:"podAnnotations,omitempty" protobuf:"bytes,15,rep,name=podAnnotations"` + PodAnnotations map[string]string `json:"podAnnotations,omitempty" protobuf:"bytes,1,rep,name=podAnnotations"` // NodeSelector is a selector which must be true for the pod to fit on a node. // Selector which must match a node's labels for the pod to be scheduled on that node. // More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ // +optional - NodeSelector map[string]string `json:"nodeSelector,omitempty" protobuf:"bytes,1,rep,name=nodeSelector"` + NodeSelector map[string]string `json:"nodeSelector,omitempty" protobuf:"bytes,2,rep,name=nodeSelector"` // ServiceAccountName is the name of the ServiceAccount to use to run this pod. // More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ // +optional - ServiceAccountName string `json:"serviceAccountName,omitempty" protobuf:"bytes,2,opt,name=serviceAccountName"` + ServiceAccountName string `json:"serviceAccountName,omitempty" protobuf:"bytes,3,opt,name=serviceAccountName"` // ServiceAccountAnnotations are the annotations that will be attached with the respective ServiceAccount // +optional - ServiceAccountAnnotations map[string]string `json:"serviceAccountAnnotations,omitempty" protobuf:"bytes,16,rep,name=serviceAccountAnnotations"` + ServiceAccountAnnotations map[string]string `json:"serviceAccountAnnotations,omitempty" protobuf:"bytes,4,rep,name=serviceAccountAnnotations"` // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. // +optional - AutomountServiceAccountToken *bool `json:"automountServiceAccountToken,omitempty" protobuf:"varint,3,opt,name=automountServiceAccountToken"` + AutomountServiceAccountToken *bool `json:"automountServiceAccountToken,omitempty" protobuf:"varint,5,opt,name=automountServiceAccountToken"` // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, // the scheduler simply schedules this pod onto that node, assuming that it fits resource // requirements. // +optional - NodeName string `json:"nodeName,omitempty" protobuf:"bytes,4,opt,name=nodeName"` + NodeName string `json:"nodeName,omitempty" protobuf:"bytes,6,opt,name=nodeName"` // Security options the pod should run with. // More info: https://kubernetes.io/docs/concepts/policy/security-context/ // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ // +optional - SecurityContext *core.PodSecurityContext `json:"securityContext,omitempty" protobuf:"bytes,5,opt,name=securityContext"` + SecurityContext *core.PodSecurityContext `json:"securityContext,omitempty" protobuf:"bytes,7,opt,name=securityContext"` // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodRuntimeSettings. // If specified, these secrets will be passed to individual puller implementations for them to use. For example, // in the case of docker, only DockerConfig type secrets are honored. // More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod // +optional - ImagePullSecrets []core.LocalObjectReference `json:"imagePullSecrets,omitempty" protobuf:"bytes,6,rep,name=imagePullSecrets"` + ImagePullSecrets []core.LocalObjectReference `json:"imagePullSecrets,omitempty" protobuf:"bytes,8,rep,name=imagePullSecrets"` // If specified, the pod's scheduling constraints // +optional - Affinity *core.Affinity `json:"affinity,omitempty" protobuf:"bytes,7,opt,name=affinity"` + Affinity *core.Affinity `json:"affinity,omitempty" protobuf:"bytes,9,opt,name=affinity"` // If specified, the pod will be dispatched by specified scheduler. // If not specified, the pod will be dispatched by default scheduler. // +optional - SchedulerName string `json:"schedulerName,omitempty" protobuf:"bytes,8,opt,name=schedulerName"` + SchedulerName string `json:"schedulerName,omitempty" protobuf:"bytes,10,opt,name=schedulerName"` // If specified, the pod's tolerations. // +optional - Tolerations []core.Toleration `json:"tolerations,omitempty" protobuf:"bytes,9,rep,name=tolerations"` + Tolerations []core.Toleration `json:"tolerations,omitempty" protobuf:"bytes,11,rep,name=tolerations"` // If specified, indicates the pod's priority. "system-node-critical" and // "system-cluster-critical" are two special keywords which indicate the // highest priorities with the former being the highest priority. Any other @@ -80,20 +80,20 @@ type PodRuntimeSettings struct { // If not specified, the pod priority will be default or zero if there is no // default. // +optional - PriorityClassName string `json:"priorityClassName,omitempty" protobuf:"bytes,10,opt,name=priorityClassName"` + PriorityClassName string `json:"priorityClassName,omitempty" protobuf:"bytes,12,opt,name=priorityClassName"` // The priority value. Various system components use this field to find the // priority of the pod. When Priority Admission Controller is enabled, it // prevents users from setting this field. The admission controller populates // this field from PriorityClassName. // The higher the value, the higher the priority. // +optional - Priority *int32 `json:"priority,omitempty" protobuf:"varint,11,opt,name=priority"` + Priority *int32 `json:"priority,omitempty" protobuf:"varint,13,opt,name=priority"` // If specified, all readiness gates will be evaluated for pod readiness. // A pod is ready when all its containers are ready AND // all conditions specified in the readiness gates have status equal to "True" // More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md // +optional - ReadinessGates []core.PodReadinessGate `json:"readinessGates,omitempty" protobuf:"bytes,12,rep,name=readinessGates"` + ReadinessGates []core.PodReadinessGate `json:"readinessGates,omitempty" protobuf:"bytes,14,rep,name=readinessGates"` // RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used // to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. // If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an @@ -101,12 +101,22 @@ type PodRuntimeSettings struct { // More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md // This is an alpha feature and may change in the future. // +optional - RuntimeClassName *string `json:"runtimeClassName,omitempty" protobuf:"bytes,13,opt,name=runtimeClassName"` + RuntimeClassName *string `json:"runtimeClassName,omitempty" protobuf:"bytes,15,opt,name=runtimeClassName"` // EnableServiceLinks indicates whether information about services should be injected into pod's // environment variables, matching the syntax of Docker links. // Optional: Defaults to true. // +optional - EnableServiceLinks *bool `json:"enableServiceLinks,omitempty" protobuf:"varint,14,opt,name=enableServiceLinks"` + EnableServiceLinks *bool `json:"enableServiceLinks,omitempty" protobuf:"varint,16,opt,name=enableServiceLinks"` + // TopologySpreadConstraints describes how a group of pods ought to spread across topology + // domains. Scheduler will schedule pods in a way which abides by the constraints. + // All topologySpreadConstraints are ANDed. + // +optional + // +patchMergeKey=topologyKey + // +patchStrategy=merge + // +listType=map + // +listMapKey=topologyKey + // +listMapKey=whenUnsatisfiable + TopologySpreadConstraints []core.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty" patchStrategy:"merge" patchMergeKey:"topologyKey" protobuf:"bytes,17,rep,name=topologySpreadConstraints"` } type ContainerRuntimeSettings struct { diff --git a/vendor/kmodules.xyz/offshoot-api/api/v1/types.go b/vendor/kmodules.xyz/offshoot-api/api/v1/types.go index 25c49c555..f21576f6d 100644 --- a/vendor/kmodules.xyz/offshoot-api/api/v1/types.go +++ b/vendor/kmodules.xyz/offshoot-api/api/v1/types.go @@ -220,6 +220,17 @@ type PodSpec struct { // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ // +optional ContainerSecurityContext *core.SecurityContext `json:"containerSecurityContext,omitempty" protobuf:"bytes,23,opt,name=containerSecurityContext"` + + // TopologySpreadConstraints describes how a group of pods ought to spread across topology + // domains. Scheduler will schedule pods in a way which abides by the constraints. + // All topologySpreadConstraints are ANDed. + // +optional + // +patchMergeKey=topologyKey + // +patchStrategy=merge + // +listType=map + // +listMapKey=topologyKey + // +listMapKey=whenUnsatisfiable + TopologySpreadConstraints []core.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty" patchStrategy:"merge" patchMergeKey:"topologyKey" protobuf:"bytes,24,rep,name=topologySpreadConstraints"` } // ServiceTemplateSpec describes the data a service should have when created from a template diff --git a/vendor/kmodules.xyz/offshoot-api/api/v1/zz_generated.deepcopy.go b/vendor/kmodules.xyz/offshoot-api/api/v1/zz_generated.deepcopy.go index b50a298ee..69c566713 100644 --- a/vendor/kmodules.xyz/offshoot-api/api/v1/zz_generated.deepcopy.go +++ b/vendor/kmodules.xyz/offshoot-api/api/v1/zz_generated.deepcopy.go @@ -292,6 +292,13 @@ func (in *PodRuntimeSettings) DeepCopyInto(out *PodRuntimeSettings) { *out = new(bool) **out = **in } + if in.TopologySpreadConstraints != nil { + in, out := &in.TopologySpreadConstraints, &out.TopologySpreadConstraints + *out = make([]corev1.TopologySpreadConstraint, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -392,6 +399,13 @@ func (in *PodSpec) DeepCopyInto(out *PodSpec) { *out = new(corev1.SecurityContext) (*in).DeepCopyInto(*out) } + if in.TopologySpreadConstraints != nil { + in, out := &in.TopologySpreadConstraints, &out.TopologySpreadConstraints + *out = make([]corev1.TopologySpreadConstraint, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/vendor/modules.txt b/vendor/modules.txt index 7c4cb559a..98cfebed2 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -157,7 +157,6 @@ gomodules.xyz/jsonpatch/v2 ## explicit gomodules.xyz/logs # gomodules.xyz/mergo v0.3.13-0.20220214162359-48efe39fd402 -## explicit gomodules.xyz/mergo # gomodules.xyz/pointer v0.1.0 gomodules.xyz/pointer @@ -537,7 +536,7 @@ kmodules.xyz/custom-resources/client/clientset/versioned/typed/metrics/v1alpha1 kmodules.xyz/custom-resources/crds # kmodules.xyz/objectstore-api v0.0.0-20220317220441-f1d593d0a778 kmodules.xyz/objectstore-api/api/v1 -# kmodules.xyz/offshoot-api v0.0.0-20220329041708-c076b2bcb0f8 +# kmodules.xyz/offshoot-api v0.0.0-20220419215722-c7fc995091d3 ## explicit kmodules.xyz/offshoot-api/api/v1 # kmodules.xyz/prober v0.0.0-20220317043828-5ae0114adcad @@ -554,7 +553,7 @@ sigs.k8s.io/structured-merge-diff/v4/typed sigs.k8s.io/structured-merge-diff/v4/value # sigs.k8s.io/yaml v1.3.0 sigs.k8s.io/yaml -# stash.appscode.dev/apimachinery v0.19.0 +# stash.appscode.dev/apimachinery v0.19.1-0.20220425033401-c840c081133c ## explicit stash.appscode.dev/apimachinery/apis/repositories stash.appscode.dev/apimachinery/apis/repositories/v1alpha1 diff --git a/vendor/stash.appscode.dev/apimachinery/apis/repositories/v1alpha1/openapi_generated.go b/vendor/stash.appscode.dev/apimachinery/apis/repositories/v1alpha1/openapi_generated.go index 6d9feb925..f6144a8e7 100644 --- a/vendor/stash.appscode.dev/apimachinery/apis/repositories/v1alpha1/openapi_generated.go +++ b/vendor/stash.appscode.dev/apimachinery/apis/repositories/v1alpha1/openapi_generated.go @@ -18630,11 +18630,36 @@ func schema_kmodulesxyz_offshoot_api_api_v1_PodRuntimeSettings(ref common.Refere Format: "", }, }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration"}, + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint"}, } } @@ -18849,11 +18874,36 @@ func schema_kmodulesxyz_offshoot_api_api_v1_PodSpec(ref common.ReferenceCallback Ref: ref("k8s.io/api/core/v1.SecurityContext"), }, }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.Toleration"}, + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint"}, } } diff --git a/vendor/stash.appscode.dev/apimachinery/apis/stash/v1alpha1/openapi_generated.go b/vendor/stash.appscode.dev/apimachinery/apis/stash/v1alpha1/openapi_generated.go index 1b00eff4a..8b5ec86dc 100644 --- a/vendor/stash.appscode.dev/apimachinery/apis/stash/v1alpha1/openapi_generated.go +++ b/vendor/stash.appscode.dev/apimachinery/apis/stash/v1alpha1/openapi_generated.go @@ -18635,11 +18635,36 @@ func schema_kmodulesxyz_offshoot_api_api_v1_PodRuntimeSettings(ref common.Refere Format: "", }, }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration"}, + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint"}, } } @@ -18854,11 +18879,36 @@ func schema_kmodulesxyz_offshoot_api_api_v1_PodSpec(ref common.ReferenceCallback Ref: ref("k8s.io/api/core/v1.SecurityContext"), }, }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.Toleration"}, + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint"}, } } diff --git a/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/backup_blueprint_types.go b/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/backup_blueprint_types.go index 1c4d04496..24480cab9 100644 --- a/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/backup_blueprint_types.go +++ b/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/backup_blueprint_types.go @@ -48,7 +48,13 @@ type BackupBlueprint struct { type BackupBlueprintSpec struct { // RepositorySpec is used to create Repository crd for respective workload v1alpha1.RepositorySpec `json:",inline"` - // RepoNamespace specifies the namespace where the Repository will be created for the respective target + // BackupNamespace specifies the namespace where the backup resources (i.e. BackupConfiguration, BackupSession, Job, Repository etc.) will be created. + // If you don't provide this field, then the backup resources will be created in the target namespace. + // +optional + BackupNamespace string `json:"backupNamespace,omitempty"` + // RepoNamespace lets you specify the namespace for the Repositories. If this field is not specified, Stash will create the Repository + // in the namespace pointed by the backupNamespace field. If neither of the backupNamespace and repoNamespace is specified, + // Stash will create the Repository in the target namespace. // +optional RepoNamespace string `json:"repoNamespace,omitempty"` // Schedule specifies the default schedule for backup. diff --git a/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/openapi_generated.go b/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/openapi_generated.go index 82a43c226..04971f8ac 100644 --- a/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/openapi_generated.go +++ b/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/openapi_generated.go @@ -18678,11 +18678,36 @@ func schema_kmodulesxyz_offshoot_api_api_v1_PodRuntimeSettings(ref common.Refere Format: "", }, }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration"}, + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint"}, } } @@ -18897,11 +18922,36 @@ func schema_kmodulesxyz_offshoot_api_api_v1_PodSpec(ref common.ReferenceCallback Ref: ref("k8s.io/api/core/v1.SecurityContext"), }, }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.Toleration"}, + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint"}, } } @@ -19646,9 +19696,16 @@ func schema_apimachinery_apis_stash_v1beta1_BackupBlueprintSpec(ref common.Refer Ref: ref("stash.appscode.dev/apimachinery/apis/stash/v1alpha1.UsagePolicy"), }, }, + "backupNamespace": { + SchemaProps: spec.SchemaProps{ + Description: "BackupNamespace specifies the namespace where the backup resources (i.e. BackupConfiguration, BackupSession, Job, Repository etc.) will be created. If you don't provide this field, then the backup resources will be created in the target namespace.", + Type: []string{"string"}, + Format: "", + }, + }, "repoNamespace": { SchemaProps: spec.SchemaProps{ - Description: "RepoNamespace specifies the namespace where the Repository will be created for the respective target", + Description: "RepoNamespace lets you specify the namespace for the Repositories. If this field is not specified, Stash will create the Repository in the namespace pointed by the backupNamespace field. If neither of the backupNamespace and repoNamespace is specified, Stash will create the Repository in the target namespace.", Type: []string{"string"}, Format: "", }, @@ -21808,6 +21865,12 @@ func schema_apimachinery_apis_stash_v1beta1_TargetRef(ref common.ReferenceCallba Format: "", }, }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, }, }, }, diff --git a/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/types.go b/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/types.go index 9cd857280..321036a7b 100644 --- a/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/types.go +++ b/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/types.go @@ -140,6 +140,8 @@ type TargetRef struct { APIVersion string `json:"apiVersion,omitempty"` Kind string `json:"kind,omitempty"` Name string `json:"name,omitempty"` + // +optional + Namespace string `json:"namespace,omitempty"` } type ExecutionOrder string diff --git a/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/types_helpers.go b/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/types_helpers.go index 929e8dae2..54ec2592d 100644 --- a/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/types_helpers.go +++ b/vendor/stash.appscode.dev/apimachinery/apis/stash/v1beta1/types_helpers.go @@ -25,6 +25,7 @@ import ( const ( StashBackupComponent = "stash-backup" StashRestoreComponent = "stash-restore" + TargetKindEmpty = "EmptyTarget" ) // TODO: complete @@ -38,3 +39,11 @@ func GetOpenAPIDefinitionsWithRetentionPolicy(ref common.ReferenceCallback) map[ out[key] = v1alpha1.GetOpenAPIDefinitions(ref)[key] return out } + +func EmptyTargetRef() TargetRef { + return TargetRef{ + APIVersion: "na", + Kind: TargetKindEmpty, + Name: "na", + } +} diff --git a/vendor/stash.appscode.dev/apimachinery/apis/ui/v1alpha1/openapi_generated.go b/vendor/stash.appscode.dev/apimachinery/apis/ui/v1alpha1/openapi_generated.go index cb943a047..1997f377e 100644 --- a/vendor/stash.appscode.dev/apimachinery/apis/ui/v1alpha1/openapi_generated.go +++ b/vendor/stash.appscode.dev/apimachinery/apis/ui/v1alpha1/openapi_generated.go @@ -18630,11 +18630,36 @@ func schema_kmodulesxyz_offshoot_api_api_v1_PodRuntimeSettings(ref common.Refere Format: "", }, }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration"}, + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint"}, } } @@ -18849,11 +18874,36 @@ func schema_kmodulesxyz_offshoot_api_api_v1_PodSpec(ref common.ReferenceCallback Ref: ref("k8s.io/api/core/v1.SecurityContext"), }, }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.Toleration"}, + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint"}, } } diff --git a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupbatches.yaml b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupbatches.yaml index 4f839d30d..8ca99957c 100644 --- a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupbatches.yaml +++ b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupbatches.yaml @@ -3179,6 +3179,130 @@ spec: type: string type: object type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how + a group of pods ought to spread across topology domains. + Scheduler will schedule pods in a way which abides + by the constraints. All topologySpreadConstraints + are ANDed. + items: + description: TopologySpreadConstraint specifies how + to spread matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are + counted to determine the number of pods in their + corresponding topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of + label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, a + key, and an operator that relates the + key and values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + maxSkew: + description: 'MaxSkew describes the degree to + which pods may be unevenly distributed. When + `whenUnsatisfiable=DoNotSchedule`, it is the + maximum permitted difference between the number + of matching pods in the target topology and + the global minimum. For example, in a 3-zone + cluster, MaxSkew is set to 1, and pods with + the same labelSelector spread as 1/1/0: | zone1 + | zone2 | zone3 | | P | P | | + - if MaxSkew is 1, incoming pod can only be + scheduled to zone3 to become 1/1/1; scheduling + it onto zone1(zone2) would make the ActualSkew(2-0) + on zone1(zone2) violate MaxSkew(1). - if MaxSkew + is 2, incoming pod can be scheduled onto any + zone. When `whenUnsatisfiable=ScheduleAnyway`, + it is used to give higher precedence to topologies + that satisfy it. It''s a required field. Default + value is 1 and 0 is not allowed.' + format: int32 + type: integer + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", + and try to put balanced number of pods into + each bucket. It's a required field. + type: string + whenUnsatisfiable: + description: 'WhenUnsatisfiable indicates how + to deal with a pod if it doesn''t satisfy the + spread constraint. - DoNotSchedule (default) + tells the scheduler not to schedule it. - ScheduleAnyway + tells the scheduler to schedule the pod in any + location, but giving higher precedence to + topologies that would help reduce the skew. + A constraint is considered "Unsatisfiable" for + an incoming pod if and only if every possible + node assigment for that pod would violate "MaxSkew" + on some topology. For example, in a 3-zone cluster, + MaxSkew is set to 1, and pods with the same + labelSelector spread as 3/1/1: | zone1 | zone2 + | zone3 | | P P P | P | P | If WhenUnsatisfiable + is set to DoNotSchedule, incoming pod can only + be scheduled to zone2(zone3) to become 3/2/1(3/1/2) + as ActualSkew(2-1) on zone2(zone3) satisfies + MaxSkew(1). In other words, the cluster can + still be imbalanced, but scheduler won''t make + it *more* imbalanced. It''s a required field.' + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map type: object type: object target: @@ -3218,6 +3342,8 @@ spec: type: string name: type: string + namespace: + type: string type: object replicas: description: replicas are the desired number of replicas @@ -5414,6 +5540,120 @@ spec: type: string type: object type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how a group + of pods ought to spread across topology domains. Scheduler + will schedule pods in a way which abides by the constraints. + All topologySpreadConstraints are ANDed. + items: + description: TopologySpreadConstraint specifies how to spread + matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are counted + to determine the number of pods in their corresponding + topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: key is the label key that the + selector applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. If the + operator is Exists or DoesNotExist, the + values array must be empty. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is "In", + and the values array contains only "value". The + requirements are ANDed. + type: object + type: object + maxSkew: + description: 'MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between the + number of matching pods in the target topology and + the global minimum. For example, in a 3-zone cluster, + MaxSkew is set to 1, and pods with the same labelSelector + spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | + - if MaxSkew is 1, incoming pod can only be scheduled + to zone3 to become 1/1/1; scheduling it onto zone1(zone2) + would make the ActualSkew(2-0) on zone1(zone2) violate + MaxSkew(1). - if MaxSkew is 2, incoming pod can be + scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, + it is used to give higher precedence to topologies + that satisfy it. It''s a required field. Default value + is 1 and 0 is not allowed.' + format: int32 + type: integer + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", and try + to put balanced number of pods into each bucket. It's + a required field. + type: string + whenUnsatisfiable: + description: 'WhenUnsatisfiable indicates how to deal + with a pod if it doesn''t satisfy the spread constraint. + - DoNotSchedule (default) tells the scheduler not + to schedule it. - ScheduleAnyway tells the scheduler + to schedule the pod in any location, but giving + higher precedence to topologies that would help reduce + the skew. A constraint is considered "Unsatisfiable" + for an incoming pod if and only if every possible + node assigment for that pod would violate "MaxSkew" + on some topology. For example, in a 3-zone cluster, + MaxSkew is set to 1, and pods with the same labelSelector + spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P + | P | P | If WhenUnsatisfiable is set to DoNotSchedule, + incoming pod can only be scheduled to zone2(zone3) + to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) + satisfies MaxSkew(1). In other words, the cluster + can still be imbalanced, but scheduler won''t make + it *more* imbalanced. It''s a required field.' + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map type: object type: object schedule: @@ -5536,6 +5776,8 @@ spec: type: string name: type: string + namespace: + type: string type: object required: - target diff --git a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupblueprints.yaml b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupblueprints.yaml index a8cff2c39..e78752bb3 100644 --- a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupblueprints.yaml +++ b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupblueprints.yaml @@ -1577,6 +1577,12 @@ spec: purpose. Default: 1' format: int32 type: integer + backupNamespace: + description: BackupNamespace specifies the namespace where the backup + resources (i.e. BackupConfiguration, BackupSession, Job, Repository + etc.) will be created. If you don't provide this field, then the + backup resources will be created in the target namespace. + type: string interimVolumeTemplate: description: InterimVolumeTemplate specifies a template for a volume to hold targeted data temporarily before uploading to backend or @@ -1882,8 +1888,11 @@ spec: type: object type: object repoNamespace: - description: RepoNamespace specifies the namespace where the Repository - will be created for the respective target + description: RepoNamespace lets you specify the namespace for the + Repositories. If this field is not specified, Stash will create + the Repository in the namespace pointed by the backupNamespace field. + If neither of the backupNamespace and repoNamespace is specified, + Stash will create the Repository in the target namespace. type: string retentionPolicy: description: RetentionPolicy indicates the policy to follow to clean @@ -3958,6 +3967,120 @@ spec: type: string type: object type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how a group + of pods ought to spread across topology domains. Scheduler + will schedule pods in a way which abides by the constraints. + All topologySpreadConstraints are ANDed. + items: + description: TopologySpreadConstraint specifies how to spread + matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are counted + to determine the number of pods in their corresponding + topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: key is the label key that the + selector applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. If the + operator is Exists or DoesNotExist, the + values array must be empty. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is "In", + and the values array contains only "value". The + requirements are ANDed. + type: object + type: object + maxSkew: + description: 'MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between the + number of matching pods in the target topology and + the global minimum. For example, in a 3-zone cluster, + MaxSkew is set to 1, and pods with the same labelSelector + spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | + - if MaxSkew is 1, incoming pod can only be scheduled + to zone3 to become 1/1/1; scheduling it onto zone1(zone2) + would make the ActualSkew(2-0) on zone1(zone2) violate + MaxSkew(1). - if MaxSkew is 2, incoming pod can be + scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, + it is used to give higher precedence to topologies + that satisfy it. It''s a required field. Default value + is 1 and 0 is not allowed.' + format: int32 + type: integer + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", and try + to put balanced number of pods into each bucket. It's + a required field. + type: string + whenUnsatisfiable: + description: 'WhenUnsatisfiable indicates how to deal + with a pod if it doesn''t satisfy the spread constraint. + - DoNotSchedule (default) tells the scheduler not + to schedule it. - ScheduleAnyway tells the scheduler + to schedule the pod in any location, but giving + higher precedence to topologies that would help reduce + the skew. A constraint is considered "Unsatisfiable" + for an incoming pod if and only if every possible + node assigment for that pod would violate "MaxSkew" + on some topology. For example, in a 3-zone cluster, + MaxSkew is set to 1, and pods with the same labelSelector + spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P + | P | P | If WhenUnsatisfiable is set to DoNotSchedule, + incoming pod can only be scheduled to zone2(zone3) + to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) + satisfies MaxSkew(1). In other words, the cluster + can still be imbalanced, but scheduler won''t make + it *more* imbalanced. It''s a required field.' + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map type: object type: object schedule: diff --git a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupconfigurations.yaml b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupconfigurations.yaml index d59da36de..4be11adb6 100644 --- a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupconfigurations.yaml +++ b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupconfigurations.yaml @@ -2768,6 +2768,120 @@ spec: type: string type: object type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how a group + of pods ought to spread across topology domains. Scheduler + will schedule pods in a way which abides by the constraints. + All topologySpreadConstraints are ANDed. + items: + description: TopologySpreadConstraint specifies how to spread + matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are counted + to determine the number of pods in their corresponding + topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: key is the label key that the + selector applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. If the + operator is Exists or DoesNotExist, the + values array must be empty. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is "In", + and the values array contains only "value". The + requirements are ANDed. + type: object + type: object + maxSkew: + description: 'MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between the + number of matching pods in the target topology and + the global minimum. For example, in a 3-zone cluster, + MaxSkew is set to 1, and pods with the same labelSelector + spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | + - if MaxSkew is 1, incoming pod can only be scheduled + to zone3 to become 1/1/1; scheduling it onto zone1(zone2) + would make the ActualSkew(2-0) on zone1(zone2) violate + MaxSkew(1). - if MaxSkew is 2, incoming pod can be + scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, + it is used to give higher precedence to topologies + that satisfy it. It''s a required field. Default value + is 1 and 0 is not allowed.' + format: int32 + type: integer + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", and try + to put balanced number of pods into each bucket. It's + a required field. + type: string + whenUnsatisfiable: + description: 'WhenUnsatisfiable indicates how to deal + with a pod if it doesn''t satisfy the spread constraint. + - DoNotSchedule (default) tells the scheduler not + to schedule it. - ScheduleAnyway tells the scheduler + to schedule the pod in any location, but giving + higher precedence to topologies that would help reduce + the skew. A constraint is considered "Unsatisfiable" + for an incoming pod if and only if every possible + node assigment for that pod would violate "MaxSkew" + on some topology. For example, in a 3-zone cluster, + MaxSkew is set to 1, and pods with the same labelSelector + spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P + | P | P | If WhenUnsatisfiable is set to DoNotSchedule, + incoming pod can only be scheduled to zone2(zone3) + to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) + satisfies MaxSkew(1). In other words, the cluster + can still be imbalanced, but scheduler won''t make + it *more* imbalanced. It''s a required field.' + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map type: object type: object schedule: @@ -2808,6 +2922,8 @@ spec: type: string name: type: string + namespace: + type: string type: object replicas: description: replicas are the desired number of replicas whose diff --git a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupsessions.yaml b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupsessions.yaml index 1491612b1..a5de60d3b 100644 --- a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupsessions.yaml +++ b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_backupsessions.yaml @@ -219,6 +219,8 @@ spec: type: string name: type: string + namespace: + type: string type: object stats: description: Stats shows statistics of individual hosts for diff --git a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_restorebatches.yaml b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_restorebatches.yaml index b3c164895..a260c4a6a 100644 --- a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_restorebatches.yaml +++ b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_restorebatches.yaml @@ -3170,6 +3170,130 @@ spec: type: string type: object type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how + a group of pods ought to spread across topology domains. + Scheduler will schedule pods in a way which abides + by the constraints. All topologySpreadConstraints + are ANDed. + items: + description: TopologySpreadConstraint specifies how + to spread matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are + counted to determine the number of pods in their + corresponding topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of + label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, a + key, and an operator that relates the + key and values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + maxSkew: + description: 'MaxSkew describes the degree to + which pods may be unevenly distributed. When + `whenUnsatisfiable=DoNotSchedule`, it is the + maximum permitted difference between the number + of matching pods in the target topology and + the global minimum. For example, in a 3-zone + cluster, MaxSkew is set to 1, and pods with + the same labelSelector spread as 1/1/0: | zone1 + | zone2 | zone3 | | P | P | | + - if MaxSkew is 1, incoming pod can only be + scheduled to zone3 to become 1/1/1; scheduling + it onto zone1(zone2) would make the ActualSkew(2-0) + on zone1(zone2) violate MaxSkew(1). - if MaxSkew + is 2, incoming pod can be scheduled onto any + zone. When `whenUnsatisfiable=ScheduleAnyway`, + it is used to give higher precedence to topologies + that satisfy it. It''s a required field. Default + value is 1 and 0 is not allowed.' + format: int32 + type: integer + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", + and try to put balanced number of pods into + each bucket. It's a required field. + type: string + whenUnsatisfiable: + description: 'WhenUnsatisfiable indicates how + to deal with a pod if it doesn''t satisfy the + spread constraint. - DoNotSchedule (default) + tells the scheduler not to schedule it. - ScheduleAnyway + tells the scheduler to schedule the pod in any + location, but giving higher precedence to + topologies that would help reduce the skew. + A constraint is considered "Unsatisfiable" for + an incoming pod if and only if every possible + node assigment for that pod would violate "MaxSkew" + on some topology. For example, in a 3-zone cluster, + MaxSkew is set to 1, and pods with the same + labelSelector spread as 3/1/1: | zone1 | zone2 + | zone3 | | P P P | P | P | If WhenUnsatisfiable + is set to DoNotSchedule, incoming pod can only + be scheduled to zone2(zone3) to become 3/2/1(3/1/2) + as ActualSkew(2-1) on zone2(zone3) satisfies + MaxSkew(1). In other words, the cluster can + still be imbalanced, but scheduler won''t make + it *more* imbalanced. It''s a required field.' + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map type: object type: object target: @@ -3196,6 +3320,8 @@ spec: type: string name: type: string + namespace: + type: string type: object replicas: description: replicas is the desired number of replicas @@ -3826,6 +3952,8 @@ spec: type: string name: type: string + namespace: + type: string type: object stats: description: Stats shows restore statistics of individual hosts diff --git a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_restoresessions.yaml b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_restoresessions.yaml index 642d6918e..172d6ab05 100644 --- a/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_restoresessions.yaml +++ b/vendor/stash.appscode.dev/apimachinery/crds/stash.appscode.com_restoresessions.yaml @@ -2766,6 +2766,120 @@ spec: type: string type: object type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how a group + of pods ought to spread across topology domains. Scheduler + will schedule pods in a way which abides by the constraints. + All topologySpreadConstraints are ANDed. + items: + description: TopologySpreadConstraint specifies how to spread + matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are counted + to determine the number of pods in their corresponding + topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: key is the label key that the + selector applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. If the + operator is Exists or DoesNotExist, the + values array must be empty. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is "In", + and the values array contains only "value". The + requirements are ANDed. + type: object + type: object + maxSkew: + description: 'MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between the + number of matching pods in the target topology and + the global minimum. For example, in a 3-zone cluster, + MaxSkew is set to 1, and pods with the same labelSelector + spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | + - if MaxSkew is 1, incoming pod can only be scheduled + to zone3 to become 1/1/1; scheduling it onto zone1(zone2) + would make the ActualSkew(2-0) on zone1(zone2) violate + MaxSkew(1). - if MaxSkew is 2, incoming pod can be + scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, + it is used to give higher precedence to topologies + that satisfy it. It''s a required field. Default value + is 1 and 0 is not allowed.' + format: int32 + type: integer + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", and try + to put balanced number of pods into each bucket. It's + a required field. + type: string + whenUnsatisfiable: + description: 'WhenUnsatisfiable indicates how to deal + with a pod if it doesn''t satisfy the spread constraint. + - DoNotSchedule (default) tells the scheduler not + to schedule it. - ScheduleAnyway tells the scheduler + to schedule the pod in any location, but giving + higher precedence to topologies that would help reduce + the skew. A constraint is considered "Unsatisfiable" + for an incoming pod if and only if every possible + node assigment for that pod would violate "MaxSkew" + on some topology. For example, in a 3-zone cluster, + MaxSkew is set to 1, and pods with the same labelSelector + spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P + | P | P | If WhenUnsatisfiable is set to DoNotSchedule, + incoming pod can only be scheduled to zone2(zone3) + to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) + satisfies MaxSkew(1). In other words, the cluster + can still be imbalanced, but scheduler won''t make + it *more* imbalanced. It''s a required field.' + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map type: object type: object target: @@ -2792,6 +2906,8 @@ spec: type: string name: type: string + namespace: + type: string type: object replicas: description: replicas is the desired number of replicas of the diff --git a/vendor/stash.appscode.dev/apimachinery/pkg/conditions/backup_invoker.go b/vendor/stash.appscode.dev/apimachinery/pkg/conditions/backup_invoker.go index 04b945c6d..1ae9d1f61 100644 --- a/vendor/stash.appscode.dev/apimachinery/pkg/conditions/backup_invoker.go +++ b/vendor/stash.appscode.dev/apimachinery/pkg/conditions/backup_invoker.go @@ -18,7 +18,6 @@ package conditions import ( "fmt" - "strings" "stash.appscode.dev/apimachinery/apis/stash/v1beta1" "stash.appscode.dev/apimachinery/pkg/invoker" @@ -34,8 +33,8 @@ func SetBackupTargetFoundConditionToUnknown(invoker invoker.BackupInvoker, tref Status: core.ConditionUnknown, Reason: v1beta1.UnableToCheckTargetAvailability, Message: fmt.Sprintf("Failed to check whether backup target %s %s/%s exist or not. Reason: %v", - tref.APIVersion, - strings.ToLower(tref.Kind), + tref.Kind, + tref.Namespace, tref.Name, err.Error(), ), @@ -50,8 +49,8 @@ func SetBackupTargetFoundConditionToFalse(invoker invoker.BackupInvoker, tref v1 Status: core.ConditionFalse, Reason: v1beta1.TargetNotAvailable, Message: fmt.Sprintf("Backup target %s %s/%s does not exist.", - tref.APIVersion, - strings.ToLower(tref.Kind), + tref.Kind, + tref.Namespace, tref.Name, ), LastTransitionTime: metav1.Now(), @@ -64,8 +63,8 @@ func SetBackupTargetFoundConditionToTrue(invoker invoker.BackupInvoker, tref v1b Status: core.ConditionTrue, Reason: v1beta1.TargetAvailable, Message: fmt.Sprintf("Backup target %s %s/%s found.", - tref.APIVersion, - strings.ToLower(tref.Kind), + tref.Kind, + tref.Namespace, tref.Name, ), LastTransitionTime: metav1.Now(), @@ -98,8 +97,8 @@ func SetSidecarInjectedConditionToTrue(invoker invoker.BackupInvoker, tref v1bet Status: core.ConditionTrue, Reason: v1beta1.SidecarInjectionSucceeded, Message: fmt.Sprintf("Successfully injected stash sidecar into %s %s/%s", - tref.APIVersion, - strings.ToLower(tref.Kind), + tref.Kind, + tref.Namespace, tref.Name, ), LastTransitionTime: metav1.Now(), @@ -112,8 +111,8 @@ func SetSidecarInjectedConditionToFalse(invoker invoker.BackupInvoker, tref v1be Status: core.ConditionFalse, Reason: v1beta1.SidecarInjectionFailed, Message: fmt.Sprintf("Failed to inject stash sidecar into %s %s/%s. Reason: %v", - tref.APIVersion, - strings.ToLower(tref.Kind), + tref.Kind, + tref.Namespace, tref.Name, err.Error(), ), diff --git a/vendor/stash.appscode.dev/apimachinery/pkg/conditions/restore_invoker.go b/vendor/stash.appscode.dev/apimachinery/pkg/conditions/restore_invoker.go index a6939f51d..f22212e96 100644 --- a/vendor/stash.appscode.dev/apimachinery/pkg/conditions/restore_invoker.go +++ b/vendor/stash.appscode.dev/apimachinery/pkg/conditions/restore_invoker.go @@ -18,7 +18,6 @@ package conditions import ( "fmt" - "strings" "stash.appscode.dev/apimachinery/apis/stash/v1beta1" "stash.appscode.dev/apimachinery/pkg/invoker" @@ -35,8 +34,8 @@ func SetRestoreTargetFoundConditionToTrue(inv invoker.RestoreInvoker, index int) Status: core.ConditionTrue, Reason: v1beta1.TargetAvailable, Message: fmt.Sprintf("Restore target %s %s/%s found.", - target.Ref.APIVersion, - strings.ToLower(target.Ref.Kind), + target.Ref.Kind, + target.Ref.Namespace, target.Ref.Name, ), LastTransitionTime: metav1.Now(), @@ -50,8 +49,8 @@ func SetRestoreTargetFoundConditionToFalse(inv invoker.RestoreInvoker, index int Status: core.ConditionFalse, Reason: v1beta1.TargetNotAvailable, Message: fmt.Sprintf("Restore target %s %s/%s does not exist.", - target.Ref.APIVersion, - strings.ToLower(target.Ref.Kind), + target.Ref.Kind, + target.Ref.Namespace, target.Ref.Name, ), LastTransitionTime: metav1.Now(), @@ -65,8 +64,8 @@ func SetRestoreTargetFoundConditionToUnknown(inv invoker.RestoreInvoker, index i Status: core.ConditionUnknown, Reason: v1beta1.UnableToCheckTargetAvailability, Message: fmt.Sprintf("Failed to check whether restore target %s %s/%s exist or not. Reason: %v", - target.Ref.APIVersion, - strings.ToLower(target.Ref.Kind), + target.Ref.Kind, + target.Ref.Namespace, target.Ref.Name, err, ), diff --git a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backup_invoker.go b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backup_invoker.go index be52b33c3..dc2000b01 100644 --- a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backup_invoker.go +++ b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backup_invoker.go @@ -112,7 +112,10 @@ func getMemberCondition(conditions []v1beta1.MemberConditions, target v1beta1.Ta } func TargetMatched(t1, t2 v1beta1.TargetRef) bool { - return t1.APIVersion == t2.APIVersion && t1.Kind == t2.Kind && t1.Name == t2.Name + return t1.APIVersion == t2.APIVersion && + t1.Kind == t2.Kind && + t1.Namespace == t2.Namespace && + t1.Name == t2.Name } func setMemberCondition(conditions []v1beta1.MemberConditions, target v1beta1.TargetRef, newCondition kmapi.Condition) []v1beta1.MemberConditions { diff --git a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupbatch.go b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupbatch.go index 1bbee5273..3d7ad1f8e 100644 --- a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupbatch.go +++ b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupbatch.go @@ -153,7 +153,7 @@ func (inv *BackupBatchInvoker) GetTargetInfo() []BackupTargetInfo { for _, member := range inv.backupBatch.Spec.Members { targetInfo = append(targetInfo, BackupTargetInfo{ Task: member.Task, - Target: member.Target, + Target: getBackupTarget(member.Target, inv.backupBatch.Namespace), RuntimeSettings: member.RuntimeSettings, TempDir: member.TempDir, InterimVolumeTemplate: member.InterimVolumeTemplate, @@ -163,6 +163,18 @@ func (inv *BackupBatchInvoker) GetTargetInfo() []BackupTargetInfo { return targetInfo } +func getBackupTarget(target *v1beta1.BackupTarget, invNamespace string) *v1beta1.BackupTarget { + if target == nil { + return &v1beta1.BackupTarget{ + Ref: v1beta1.EmptyTargetRef(), + } + } + if target.Ref.Namespace == "" { + target.Ref.Namespace = invNamespace + } + return target +} + func (inv *BackupBatchInvoker) GetDriver() v1beta1.Snapshotter { driver := inv.backupBatch.Spec.Driver if driver == "" { diff --git a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupconfiguration.go b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupconfiguration.go index 3eeadc414..8d7736b04 100644 --- a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupconfiguration.go +++ b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupconfiguration.go @@ -137,7 +137,7 @@ func (inv *BackupConfigurationInvoker) GetTargetInfo() []BackupTargetInfo { return []BackupTargetInfo{ { Task: inv.backupConfig.Spec.Task, - Target: inv.backupConfig.Spec.Target, + Target: getBackupTarget(inv.backupConfig.Spec.Target, inv.backupConfig.Namespace), RuntimeSettings: inv.backupConfig.Spec.RuntimeSettings, TempDir: inv.backupConfig.Spec.TempDir, InterimVolumeTemplate: inv.backupConfig.Spec.InterimVolumeTemplate, diff --git a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupsession.go b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupsession.go index 6a17a857d..5455fbb90 100644 --- a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupsession.go +++ b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/backupsession.go @@ -116,13 +116,13 @@ func IsBackupCompleted(phase v1beta1.BackupSessionPhase) bool { phase == v1beta1.BackupSessionUnknown } -func BackupCompletedForAllTargets(status []v1beta1.BackupTargetStatus) bool { +func BackupCompletedForAllTargets(status []v1beta1.BackupTargetStatus, totalTargets int) bool { for _, t := range status { if t.TotalHosts == nil || !backupCompletedForAllHosts(t.Stats, *t.TotalHosts) { return false } } - return len(status) > 0 + return len(status) == totalTargets } func backupCompletedForAllHosts(status []v1beta1.HostBackupStats, totalHosts int32) bool { diff --git a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/restorebatch.go b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/restorebatch.go index abf9131cd..10d030b0d 100644 --- a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/restorebatch.go +++ b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/restorebatch.go @@ -154,7 +154,7 @@ func (inv *RestoreBatchInvoker) GetTargetInfo() []RestoreTargetInfo { for _, member := range inv.restoreBatch.Spec.Members { targetInfo = append(targetInfo, RestoreTargetInfo{ Task: member.Task, - Target: member.Target, + Target: getRestoreTarget(member.Target, inv.restoreBatch.Namespace), RuntimeSettings: member.RuntimeSettings, TempDir: member.TempDir, InterimVolumeTemplate: member.InterimVolumeTemplate, @@ -164,6 +164,13 @@ func (inv *RestoreBatchInvoker) GetTargetInfo() []RestoreTargetInfo { return targetInfo } +func getRestoreTarget(target *v1beta1.RestoreTarget, invNamespace string) *v1beta1.RestoreTarget { + if target != nil && target.Ref.Namespace == "" { + target.Ref.Namespace = invNamespace + } + return target +} + func (inv *RestoreBatchInvoker) GetDriver() v1beta1.Snapshotter { driver := inv.restoreBatch.Spec.Driver if driver == "" { diff --git a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/restoresession.go b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/restoresession.go index 5479f7734..6f05458d5 100644 --- a/vendor/stash.appscode.dev/apimachinery/pkg/invoker/restoresession.go +++ b/vendor/stash.appscode.dev/apimachinery/pkg/invoker/restoresession.go @@ -139,7 +139,7 @@ func (inv *RestoreSessionInvoker) GetTargetInfo() []RestoreTargetInfo { return []RestoreTargetInfo{ { Task: inv.restoreSession.Spec.Task, - Target: inv.restoreSession.Spec.Target, + Target: getRestoreTarget(inv.restoreSession.Spec.Target, inv.restoreSession.Namespace), RuntimeSettings: inv.restoreSession.Spec.RuntimeSettings, TempDir: inv.restoreSession.Spec.TempDir, InterimVolumeTemplate: inv.restoreSession.Spec.InterimVolumeTemplate, @@ -383,7 +383,7 @@ func calculateRestoreSessionPhase(status v1beta1.RestoreMemberStatus) v1beta1.Re return v1beta1.RestorePending } - if RestoreCompletedForAllTargets([]v1beta1.RestoreMemberStatus{status}) { + if RestoreCompletedForAllTargets([]v1beta1.RestoreMemberStatus{status}, 1) { if status.Phase == v1beta1.TargetRestorePhaseUnknown { return v1beta1.RestorePhaseUnknown } @@ -412,13 +412,13 @@ func calculateRestoreSessionPhase(status v1beta1.RestoreMemberStatus) v1beta1.Re return v1beta1.RestoreRunning } -func RestoreCompletedForAllTargets(status []v1beta1.RestoreMemberStatus) bool { +func RestoreCompletedForAllTargets(status []v1beta1.RestoreMemberStatus, totalTargets int) bool { for _, t := range status { if t.TotalHosts == nil || !restoreCompletedForAllHosts(t.Stats, *t.TotalHosts) { return false } } - return len(status) > 0 + return len(status) == totalTargets } func restoreCompletedForAllHosts(status []v1beta1.HostRestoreStats, totalHosts int32) bool { diff --git a/vendor/stash.appscode.dev/apimachinery/pkg/util/addon.go b/vendor/stash.appscode.dev/apimachinery/pkg/util/addon.go index 3e4da0f83..cff35cbf4 100644 --- a/vendor/stash.appscode.dev/apimachinery/pkg/util/addon.go +++ b/vendor/stash.appscode.dev/apimachinery/pkg/util/addon.go @@ -28,13 +28,13 @@ import ( appcatalog_cs "kmodules.xyz/custom-resources/client/clientset/versioned" ) -func ExtractAddonInfo(appClient appcatalog_cs.Interface, task v1beta1.TaskRef, targetRef v1beta1.TargetRef, namespace string) (*appcat.StashTaskSpec, error) { +func ExtractAddonInfo(appClient appcatalog_cs.Interface, task v1beta1.TaskRef, targetRef v1beta1.TargetRef) (*appcat.StashTaskSpec, error) { var params appcat.StashAddon // If the target is AppBinding and it has addon information set in the parameters section, then extract the addon info. if invoker.TargetOfGroupKind(targetRef, appcat.SchemeGroupVersion.Group, appcat.ResourceKindApp) { // get the AppBinding - appBinding, err := appClient.AppcatalogV1alpha1().AppBindings(namespace).Get(context.TODO(), targetRef.Name, metav1.GetOptions{}) + appBinding, err := appClient.AppcatalogV1alpha1().AppBindings(targetRef.Namespace).Get(context.TODO(), targetRef.Name, metav1.GetOptions{}) if err != nil { return nil, err }